Многострочные команды в г
у меня возникли проблемы при вводе многострочных команд в ghci. Следующий 2-строчный код работает из файла:
addTwo :: Int -> Int -> Int
addTwo x y = x + y
но когда я вхожу в ghci, я получаю ошибки. Я также попытался поместить код внутрь :{ ... :}
, но они также не работают для этого примера, потому что это просто добавление строк в одну строку, что не должно быть так.
Я использую WinGHCi, версия 2011.2.0.1
3 ответа:
большую часть времени вы можете полагаться на вывод типа, чтобы разработать подпись для вас. В вашем примере достаточно следующего:
Prelude> let addTwo x y = x + y
Если вам действительно нужно определение с сигнатурой типа, или ваше определение охватывает несколько строк, вы можете сделать это в ghci:
Prelude> :{ Prelude| let addTwo :: Int -> Int -> Int Prelude| addTwo x y = x + y Prelude| :} Prelude> addTwo 4 7 11
обратите внимание, что вы также можете сжать это на одну строку:
Prelude> let addTwo :: Int -> Int -> Int ; addTwo x y = x + y
вы можете узнать больше о взаимодействии с г на интерактивная оценка на подскажите раздел документации.
решить эту проблему, запустив GHCI и набрав
:set +m
:Prelude> :set +m Prelude> let addTwo :: Int -> Int -> Int Prelude| addTwo x y = x + y Prelude| Prelude> addTwo 1 3 4
бум.
что здесь происходит (и я говорю в основном с вы, человек гуглить за помощью во время работы ваш путь через Узнай Ты Хаскелл) это то, что GHCI-это интерактивная среда, в которой вы меняете привязки имен функций на лету. Вы должны обернуть свои определения функции
let
блок, так что Хаскелл знает, что ты о том, чтобы определить что-то. Элемент:set +m
материал сокращенно для многострочного:{
код:}
строительство.пробелы также значимы в блоках, поэтому вам нужно отступить определение функции после определения типа на четыре пробела, чтобы учесть четыре пробела в
let
.