Haskell: загрузка ВСЕХ файлов в текущем пути каталога
Команда (в GHCi)
:load abc
Загружает функции в файле abc (который должен существовать в текущем пути к каталогу). Как бы я загрузить все файлы в текущем пути каталога? Спасибо
-------------------------------------------------- --------------------------------
[ОТВЕТ НА ПОСЛЕ НИЖЕ]
Привет Rotskoff, спасибо, я попробовал ваше предложение, но я не смог заставить его работать, поэтому я думаю, что я что-то неправильно понял.
Я создал 3 файла test.hs, test1.hs и test2.hs следующим образом:
->
--test.hs
import NecessaryModule
->
--test1.hs
module NecessaryModule where
addNumber1 :: Int -> Int -> Int
addNumber1 a b = a + b
->
--test2.hs
module NecessaryModule where
addNumber2 :: Int -> Int -> Int
addNumber2 a b = a + b
Затем, когда я сделал:
:load test
Я получил сообщение об ошибке:
test.hs:1:8:
Could not find module `NecessaryModule':
Use -v to see a list of the files searched for.
Спасибо
-------------------------------------------------- -------------------------------
Благодарю. Вот что я сделал, чтобы заставить его работать (следуя совету Ротскоффа):
->
--test.hs
import NecessaryModule1
import NecessaryModule2
->
--NecessaryModule1.hs
addNumber1 :: Int -> Int -> Int
addNumber1 a b = a + b
->
--NecessaryModule2.hs
addNumber2 :: Int -> Int -> Int
addNumber2 a b = a + b
2 ответа
Предположительно, вы имеете в виду исходные файлы на Haskell, потому что вы не можете использовать :load
Команда в GHCi для всего остального.
В верхней части исходного файла, который вы загружаете, включите строку:
import NecessaryModule
Для каждого из исходных файлов обязательно назовите модули, например,
module NecessaryModule where
должен появиться. GHCi автоматически свяжет все файлы.
Если вы пытаетесь импортировать данные, взгляните на System.Directory
в документации.
Лучше, если имена файлов и имена модулей будут одинаковыми:
➤ mv test1.hs NecessaryModule.hs
➤ ghci
GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> :load test
[1 of 2] Compiling NecessaryModule ( NecessaryModule.hs, interpreted )
[2 of 2] Compiling Main ( test.hs, interpreted )
Ok, modules loaded: NecessaryModule, Main.
так как :load
Команды загрузки модулей (по именам файлов) и их зависимых (как вы можете прочитать, набрав :help
или же :?
в приглашении GHCi).
Так же :load
Команда удаляет все предыдущие объявления, которые были определены в текущем сеансе GHCi, поэтому для загрузки всех файлов в текущем каталоге вы можете сделать что-то вроде этого:
Prelude> :q
Leaving GHCi.
➤ ghci *.hs
GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
<no location info>:
module `main:NecessaryModule' is defined in multiple files: NecessaryModule.hs
test2.hs
Failed, modules loaded: none.
Prelude> :q
Leaving GHCi.
➤ rm test2.hs
➤ ghci *.hs
GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 2] Compiling NecessaryModule ( NecessaryModule.hs, interpreted )
[2 of 2] Compiling Main ( test.hs, interpreted )
Ok, modules loaded: NecessaryModule, Main.
*NecessaryModule>