^-- Нет, не совсем так. Мой вопрос касается ДОБАВЛЕНИЯ шаблонов и подписей типов в интерактивном режиме... что, по-видимому, невозможно.
Самые базовые вещи, которые вы могли попробовать сделать из ранних руководств, не будут работать в GHCi:
foo [] = []
foo (x:xs) = x : foo xs
Это работает, если вы поместите его в foo.hs
и в приглашении GHCi наберете :load foo.hs
. Затем вы можете вызвать foo для списка и вернуть список.
Ранние поиски в Google говорят вам, что в GHCi вам нужен оператор let
. Но в этом случае (функция определена с несколькими шаблонами) это не сработает:
Prelude> let foo [] = []
Prelude> let foo (x:xs) = x : foo xs
Prelude> foo [1, 2, 3]
[1,2,3*** Exception: <interactive>:3:5-27: Non-exhaustive patterns
in function foo
Второе «let» перезаписало первое «let». Отказаться от let — не вариант. И ему не нравится, если вы вводите такие выражения, как foo :: [a] -> [a]
.
Учебники, кажется, обходят это и отправляют вас быстро помещать код в файлы. Что делать, если вы не хотите создавать файл и хотите работать в интерактивном режиме? Какие есть варианты?