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> 
Другие вопросы по тегам