无法匹配类型 Maybe ([a], a0)
Couldn't match type Maybe ([a], a0)
我不明白为什么会收到此错误消息:
• Couldn't match type ‘Maybe ([a], a0)’
with ‘String -> Maybe ([a1], String)’
我的代码:
type Parse a = String -> Maybe(a, String)
parseMany :: Parse a -> Parse [a]
parseMany p str = case p str of
Nothing -> Just ([], str)
Just (z, str') -> case parseMany (z str') of
Just (c, str'') -> Just ((z : c), show (str''))
使用 z str'
没有意义,z
是类型 a
的对象,而不是可以接受 String
参数的函数。
您可以使用相同的基本解析器 p
来解析下一项:
parseMany :: Parse a -> Parse [a]
parseMany p str = case p str of
Nothing -> Just ([], str)
Just (z, str') -> case parseMany p str' of
Just (c, str'') -> Just ((z : c), str'')
Nothing -> Nothing
如果我们有一个像这样的简单解析器:
myParser :: Parse Int
myParser ('a':xs) = Just (1, xs)
myParser _ = Nothing
然后它将 'a'
的列表解析为:
ghci> parseMany myParser "aaaaaa"
Just ([1,1,1,1,1,1],"")
我不明白为什么会收到此错误消息:
• Couldn't match type ‘Maybe ([a], a0)’
with ‘String -> Maybe ([a1], String)’
我的代码:
type Parse a = String -> Maybe(a, String)
parseMany :: Parse a -> Parse [a]
parseMany p str = case p str of
Nothing -> Just ([], str)
Just (z, str') -> case parseMany (z str') of
Just (c, str'') -> Just ((z : c), show (str''))
使用 z str'
没有意义,z
是类型 a
的对象,而不是可以接受 String
参数的函数。
您可以使用相同的基本解析器 p
来解析下一项:
parseMany :: Parse a -> Parse [a]
parseMany p str = case p str of
Nothing -> Just ([], str)
Just (z, str') -> case parseMany p str' of
Just (c, str'') -> Just ((z : c), str'')
Nothing -> Nothing
如果我们有一个像这样的简单解析器:
myParser :: Parse Int
myParser ('a':xs) = Just (1, xs)
myParser _ = Nothing
然后它将 'a'
的列表解析为:
ghci> parseMany myParser "aaaaaa"
Just ([1,1,1,1,1,1],"")