#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
файл для вас, и вам просто нужно заполнить зависимости сборки)