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

person artella    schedule 22.04.2012    source источник
comment
Вам нужно будет назвать ваши модули соответственно. (Вы бы увидели, что GHC ищет такие вещи, как необходимый модуль.hs, если вы скомпилировали с параметром -v вне интерактивного режима.) Поскольку вы сохранили файлы как test2.hs и т. д., компилятор не знает, как это сделать. найти их. Если вы переименуете test2.hs в необходимый модуль.hs, он должен работать. P.S. Также рекомендуется называть исходные файлы именами их модулей.   -  person rotskoff    schedule 23.04.2012


Ответы (2)


Предположительно, вы имеете в виду исходные файлы Haskell, потому что вы не можете использовать команду :load в GHCi ни для чего другого.

В верхней части исходного файла, который вы загружаете, включите строку:

import NecessaryModule

Для каждого из исходных файлов обязательно назовите модули, например,

module NecessaryModule where

должно появиться. GHCI автоматически свяжет все файлы.

Если вы пытаетесь импортировать данные, взгляните на System.Directory в документации.

person rotskoff    schedule 22.04.2012
comment
н.б. на практике довольно редко один модуль охватывает несколько файлов, за исключением главного модуля, который предоставляет несколько (с разными именами) подмодулей. - person Dan Burton; 23.04.2012
comment
Привет, я попробовал ваше предложение, но не смог заставить его работать. Я поместил это выше как редактирование (из-за нехватки места здесь). Спасибо - person artella; 23.04.2012

Лучше, если имена файлов и названия модулей будут одинаковыми:

➤ 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> 
person JJJ    schedule 23.04.2012
comment
Я использую WinGHCi, поэтому не думаю, что смогу это сделать, но приятно знать. Спасибо. - person artella; 24.04.2012
comment
@artella вы можете использовать оболочки unix, такие как bash или zsh, в Windows (используя MinGW или Cygwin), это полезно для вызова GHC / GHCi и подобных вещей, таких как работа с файлами, git (и любой другой (D) CVS) или make-файлы (любая другая система сборки, например, cabal). Также я предполагаю, что нечто подобное возможно в cmd.exe или PowerShell (не уверен насчет подстановочные знаки). - person JJJ; 24.04.2012