Где мне сохранить мои «модули» Haskell?

#windows #function #haskell #module

#Windows #функция #haskell #модуль

Вопрос:

Я помещаю некоторые функции в файл. Где на моем компьютере я должен сохранить этот файл, чтобы я мог легко загружать свои функции?

Я использую платформу Haskell на 64-разрядном компьютере с Windows.

Комментарии:

1. В облаке … </еще одна плохая шутка>

Ответ №1:

Обычно я помещаю свои модули в одно и то же дерево каталогов и запускаю ghci в корневом каталоге дерева. Тогда модули могут импортировать друг друга, и я могу легко :load вводить модули в ghci интерактивном режиме.

 $ ghci

.... loading ....

Prelude> :load directory/subdirectory/mymodule.hs
  

Комментарии:

1. Мой ghci C:Program Files (x86)Haskell Platform2011.2.0.0bin включен. Мне поместить их сюда?

2. Нет! При установке он должен был поместить себя в path или переменную среды, чтобы вы могли запускать ghci из командной строки, независимо от того, в каком каталоге вы находитесь. Если переменные среды настроены неправильно, вы можете изменить их вручную через панель управления.

3. Подождите… что? В чем состоят ваши функции на вашем ПК?

4. @perl.j — я создаю некоторый каталог, где угодно, возможно, в MyDocuments. Я поместил туда все свои материалы Haskell, включая модули с функциями (для большей пользы!). Затем я открываю оболочку, перехожу в этот каталог и набираю ghci . Windows знает, где ghci мне найти, хотя, как вы упомянули, он находится в другом каталоге.

Ответ №2:

Если вы хотите, чтобы ваши модули были доступны из нескольких разных проектов, я бы рекомендовал создать для них пакет cabal и установить его с помощью cabal install . Публикация в hackage не требуется — cabal install без аргументов ищет .cabal файл в текущем каталоге и устанавливает соответствующий пакет.

Если вы хотите, чтобы ваши модули были доступны из одного проекта — обычная практика организации ваших исходных текстов в иерархическом дереве папок применима и к Haskell. Позвольте мне показать пример:

 Hello/World.hs
Foo/Bar.hs
Quux.hs
Hello.hs
  

Hello/World.hs должно быть module Hello.World where в заголовке. Основной модуль должен иметь module Main , но фактическое имя файла может быть любым (например Quux.hs ). В Foo/Bar.hs вы можете использовать import Hello.World . При загрузке Foo/Bar.hs ghci текущий каталог должен быть корнем вашего дерева, иначе он не найдет Hello.Мир. Вы можете передавать имена модулей вместо имен файлов в ghci: например, ghci Hello.Мир будет работать.

Вот документация:

http://haskell.org/ghc/docs/latest/html/users_guide/separate-compilation.html

http://haskell.org/ghc/docs/latest/html/users_guide/packages.html

Комментарии:

1. 1 за это. Cabal на самом деле очень прост в использовании сейчас; для этого варианта использования он практически полностью автоматический ( cabal init создает .cabal файл для вас, и вам просто нужно заполнить зависимости сборки)