Я пытаюсь определить любую простую функцию, которая занимает несколько строк в GHCI, взять в качестве примера следующее:
let abs n | n >= 0 = n
| otherwise = -n
До сих пор я пытался нажать Enter после первой строки:
Prelude> let abs n | n >= 0 = n
Prelude> | otherwise = -n
<interactive>:1:0: parse error on input `|'
Я также попытался использовать :{
и :}
команды , но я не получаю далеко:
Prelude> :{
unknown command ':{'
use :? for help.
Я использую GHC Interactive версии 6.6 для Haskell 98 в Linux, чего мне не хватает?
:{
,:}
.Ответы:
Для охранников (как ваш пример), вы можете просто поместить их всех в одну строку, и это работает (охранники не заботятся о расстоянии)
Если вы хотите написать свою функцию с несколькими определениями, этот шаблон соответствует аргументам, например так:
Тогда вы бы использовали фигурные скобки с точкой с запятой, разделяющие определения
источник
GHCi теперь имеет режим многострочного ввода, который включается с помощью: set + m. Например,
источник
ghci
поведение во многом похожим на интерпретатор Python. Очень удобно! На самом деле вы можете создать.ghci
файл в своем домашнем каталоге, в который вы положите,:set +m
и многострочный режим станет по умолчанию при каждом запускеghci
!:set prompt "λ "
продолжение, скажем,Prelude
вместоλ
. Есть ли способ обойти это?let
. Просто введите сlet
последующим символом новой строки:let
⏎. Тогдаfac 0 = 1
⏎. Тогдаfac n = n * fac (n-1)
⏎ ⏎ и все готово!Дэн прав, но
:{
и:}
каждый должен появляться в своей строке:Это также взаимодействует с правилом макета, поэтому при использовании нотации может быть проще явно использовать фигурные скобки и точки с запятой. Например, это определение не выполняется:
Но это работает, когда добавляются фигурные скобки и точки с запятой:
Это будет действительно иметь значение только при вставке определений из файла, где может измениться отступ.
источник
Похоже,
:{
и:}
это довольно новая функция. Возможно, вам придется обновить GHC.Изменить: подтверждено, см. Http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/release-6-8-2.html.
источник
Если вы не хотите , чтобы обновить GHC только для
:{
и:}
вы должны будете написать все это на одной строке:Я не знаю ни одного определения в Haskell, которое должно быть написано в несколько строк. Вышесказанное действительно работает в GHCi:
Для других выражений, таких как
do
блоки, вам нужно использовать синтаксис без макета с фигурными скобками и точками с запятой (eugh).источник
Я использую GHCi, версия 8.2.1 на macOS Catalina 10.15.2. Ниже показано, как я объединил и объявление типа функции, и охрану. Обратите внимание, что вертикальные полосы слева предназначены для нескольких строк GHCi.
источник
:{
и:}
вам не нужно указыватьlet
перед объявлением типа, это означает, что вам не нужно делать отступ во второй и последующих строках.Похоже, что вставка обеих строк одновременно или использование control-enter для каждой новой строки позволяет сохранить все это вместе, по крайней мере, по адресу https://repl.it/languages/haskell . Вы увидите 2 точки в начале второй строки. Или поместите его в файл и: загрузите файл (: l main). Почему пресс не работает с отрицательными числами? О, вы должны поставить круглые скобки вокруг числа.
источник