Haskell类型错误 - 无法将预期类型“a”与实际类型“RE a”匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haskell类型错误 - 无法将预期类型“a”与实际类型“RE a”匹配相关的知识,希望对你有一定的参考价值。
所以我有以下几行......
firstMatches :: RE a -> [a]
firstMatches (a :+: b)
| (matchEmpty a == True) = [a]
其中matchEmpty定义为......
matchEmpty :: RE a -> Bool
matchEmpty Empty = True
matchEmpty (a :+: b)
| matchEmpty a == False = False
| matchEmpty b == False = False
| otherwise = True
我收到错误“无法将预期类型'a'与实际类型'RE a'匹配”
我很确定我只是没有为matchEmpty提供正确的参数,但我不知道该怎么做
matchEmpty a == False = False
RE定义为
data RE a -- regular expressions over an alphabet defined by 'a'
= Empty -- empty regular expression
| Sym a -- match the given symbol
| RE a :+: RE a -- concatenation of two regular expressions
| RE a :|: RE a -- choice between two regular expressions
| Rep (RE a) -- zero or more repetitions of a regular expression
| Rep1 (RE a) -- one or more repetitions of a regular expression
deriving (Show)
答案
你的第一个代码块有两个叫做a
的东西。在这里,我替换了变量以避免重复:
firstMatches :: RE r -> [r]
firstMatches (a :+: b)
| (matchEmpty a == True) = [a]
在错误消息中进行相同的替换:
无法将预期类型'r'与实际类型[r]匹配。 'r'是由firstMatches :: RE r - > [r]的类型签名绑定的刚性类型变量
你有a :: Re r
,并构建[a] :: [RE r]
。但类型签名说firstMatches
返回[r]
。
- 也许你的实现是正确的,你打算`firstMatches :: RE r - > [RE r]
- 也许您的类型签名是正确的。使RHS与类型sig匹配的一种方法是
| (matchEmpty a == True) = []
。这个总是返回空列表的函数不是很有用,但是我们可以使用的范围中没有r
类型的值。你有其他功能,需要一个RE r
并回馈r
?firstMatches
应该得到另一个论点吗?
以上是关于Haskell类型错误 - 无法将预期类型“a”与实际类型“RE a”匹配的主要内容,如果未能解决你的问题,请参考以下文章
将 SwiftUI 中的文本与背景属性相结合会产生错误,因为无法将“某些视图”类型的值转换为预期的参数类型“文本”?
错误:无法将类型“(_)->()”的值转换为预期的参数类型“(()-> Void)?”