module Data where
data Cons a = Con (a -> Bool)
deriving (Show)
twoCons :: Cons a -> Cons a -> Cons a
twoCons (Con a) (Con b) = Con (twoCons' a b)
twoCons' :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
twoCons' c1 c2 x = (c1 x) && (c2 x)
此代码不起作用,有或没有deriving (Show)
。
它应该结合两个测试/约束并返回由第三个Con
包装的函数。
约束可能是(>1)
和(<10)
,结果应该是两个约束的组合,约束的类型可以是任何约束。
答案 0 :(得分:3)
问题在于没有合理的方法为Show
编写Cons
的实例(自己尝试一下!)
如果删除deriving (Show)
子句,则代码可以正常运行。