Рассмотрим следующий фрагмент Haskell кода:Haskell Тип ошибки
type Parser a = String -> [(a, String)]
item :: Parser Char
item = \ inp -> case inp of
[] -> []
(x:xs) -> [(x, xs)]
ret :: a -> Parser a
ret v = \ inp -> [(v, inp)]
parse :: Parser a -> String -> [(a, String)]
parse p inp = p inp
pseq :: Parser (Char, Char)
pseq = do x <- item
item
y <- item
ret (x, y)
ac = parse pseq "abcdef"
При попытке запустить выше код в объятиями (Version сентября 2006), я получаю следующее сообщение об ошибке:
Type error in explicitly typed binding
*** Term : pseq
*** Type : [Char] -> [(([(Char,[Char])],[(Char,[Char])]),[Char])]
*** Does not match : Parser (Char,Char)
И, когда я удаляю объявление своего типа для «pseq», появляется следующее сообщение об ошибке:
Unresolved top-level overloading
*** Binding : pseq
*** Outstanding context : Monad ((->) [Char])