为什么这段代码不起作用? (结合两个测试功能)

时间:2011-10-10 21:27:40

标签: haskell

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),结果应该是两个约束的组合,约束的类型可以是任何约束。

1 个答案:

答案 0 :(得分:3)

问题在于没有合理的方法为Show编写Cons的实例(自己尝试一下!)

如果删除deriving (Show)子句,则代码可以正常运行。