Haskell 输入“=';上的分析错误;。哈斯克尔
我在Haskell中定义了以下类Haskell 输入“=';上的分析错误;。哈斯克尔,haskell,Haskell,我在Haskell中定义了以下类 class Ord a => X a where r :: (a, a) -> [a] instance (X a, X b) => X (a,b) (*)r ((a,b), (c,d)) = r' ((a,b), (c,d)) b where r' ((a, b), (c,d)) b' | a == c && b == d = (a,b)
class Ord a => X a where
r :: (a, a) -> [a]
instance (X a, X b) => X (a,b)
(*)r ((a,b), (c,d)) = r' ((a,b), (c,d)) b where
r' ((a, b), (c,d)) b'
| a == c && b == d = (a,b)
| b < d = (a,b) : (r' ((a, succ b), (c, d)) b')
| otherwise = (a,b) : (r' ((succ a, b'), (c,d)) b')
class Ord a=>xa其中
r::(a,a)->[a]
实例(xa,xb)=>X(a,b)
(*)r((a,b)、(c,d))=r'((a,b)、(c,d))b其中
r'((a,b)、(c,d))b'
|a==c&&b==d=(a,b)
|b
我在第(*)行的输入上得到错误解析错误
我不知道如何修理它。请帮帮我。应该是
instance C T where
foo = bar where
bar = ...
缺少第一个,其中。我可以看到一些错误:
- 这是不正确的:
(*)r((a,b),(c,d))
。也许你的意思是:r((a,b),(c,d))
OP用这个术语来表示行
- 您的实例定义缺少关键字
where
。应该这样定义:
实例(xa,xb)=>X(a,b),其中
- 函数
r
的类型表示它返回一个列表[a]
。但是在r'
定义的第一个子句中,返回的元组不正确。也许,您想这样做:
r' ((a, b), (c,d)) b'
| a == c && b == d = [(a,b)]
- 由于您正在使用函数
succ
,因此类型变量a
和b
应为Enum
实例
修复上述所有错误后,将给出以下类型检查代码:
instance (X a, Enum a, Enum b, X b) => X (a,b) where
r ((a,b), (c,d)) = r' ((a,b), (c,d)) b
where
r' ((a, b), (c,d)) b'
| a == c && b == d = [(a,b)]
| b < d = (a,b) : (r' ((a, succ b), (c, d)) b')
| otherwise = (a,b) : (r' ((succ a, b'), (c,d)) b')
实例(xa,枚举a,枚举b,xb)=>X(a,b),其中
r((a,b)、(c,d))=r’((a,b)、(c,d))b
哪里
r'((a,b)、(c,d))b'
|a==c&&b==d=[(a,b)]
|b这是什么意思:(*)r((a,b),(c,d))
?这似乎不正确。我猜他是想标记错误消息所指的行。@d8d0d65b3f7cf42谢谢,我现在明白了。如果不是这样表示的话会更好,因为它非常混乱!是的,但我确实认为给出一个提示比一个完整的解决方案更有用。那家伙只是问语法错误。