Помогите мне понять функции в моем конфигурационном файле Haskell GHCI - PullRequest
1 голос
/ 19 ноября 2010

Мой xp box использует платформу Haskell, версия 6.12.3

Я включаю в свой файл .ghci следующее.

:def test \_ -> return $ ":load c:\scripts\haskell\test.hs"

Теперь я могу скомпилировать и загрузить свой скрипт test.hs, введя :test. Однако я также могу использовать :t, :te or :tes. Я предполагаю, что это идиома Хаскелла, называемая сопоставлением с образцом. К сожалению, команда my: test теперь не позволяет использовать :t в качестве краткой формы команды Haskell :type.

Как вызвать функцию со всем словом, начинающимся с буквы "t", например, "test", который не будет мешать псевдониму :t :type?

Ответы [ 3 ]

4 голосов
/ 19 ноября 2010

В вашем вопросе вы путаете две разные вещи: команды GHCi , которые начинаются с двоеточия и позволяют вам взаимодействовать с GHCi во время его работы; и функции Haskell , которые имеют обычные имена и которые вы можете запускать в GHCi (но которые, вообще говоря, не могут запрашивать их). Любой учебник по Haskell поможет вам с обычными функциями; для команд GHCi лучшим справочником, вероятно, является раздел руководства GHC по GHCi ; есть даже подраздел только о командах .

Я думаю, что Предложение радиатора является лучшим для восстановления использования :t; GHCi пытается выручить вас, выяснив, какой префикс является командой, и запустив ее вместо этого, поэтому, если она угадывает, вам просто нужно сказать, что вы имеете в виду. Обратите внимание, что это не имеет отношения к сопоставлению с шаблоном. Сопоставление с образцом связано с написанием функций на Haskell, которые проверяют данные с помощью конструкторов, таких как

null :: [a] -> Bool
null []    = True
null (_:_) = False
4 голосов
/ 19 ноября 2010

Вы можете создать псевдоним для команды с помощью :def.

:def t return . (":type "++)

Как вызвать функцию с целым словом, которое начинается с буквы "t", например "test"это не будет мешать псевдониму :t :type?

До сих пор мы говорили о командах GHCi.Имена функций не начинаются с двоеточия, и нет автоматического завершения частичных имен функций.

0 голосов
/ 17 марта 2014

Из начальной главы "Learn You a Haskell".

"Интерактивный режим вызывается введением ghci в вашем приглашении. Если вы определили некоторые функции в файле, скажем, myfunctions.hs, вы загружаете эти функции, набрав: l myfunctions, а затем вы можете играть с ними при условии, что myfunctions.hs находится в той же папке, из которой был вызван ghci. Если вы измените скрипт .hs, просто запустите: l myfunctions снова или выполните: r, что эквивалентно, поскольку он перезагружает текущий скрипт. " *

Я немного смущен тем, почему ты сделал то, что сделал в первую очередь? Вы можете объяснить? Это не намного больше усилий, чтобы напечатать дополнительный .hs

test.hs 

Делая это таким образом, вы также напоминаете, что загружаете файл.

...