2011-10-10 123 views
-1
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),結果應該是兩個約束的組合,約束的類型可以是任何東西。

+5

你是什麼意思「這不行」?如果它沒有編譯,請告訴我們錯誤消息。如果它編譯但給出了錯誤的結果,告訴我們什麼樣的值會給你錯誤的結果,告訴我們錯誤的結果,告訴我們你期望的結果。 – dave4420

+0

nvm我想我得到它的工作... –

回答

3

的問題是,沒有合理的方式來寫的Show一個實例Cons(自己試試吧!)

如果刪除deriving (Show)條款代碼完美。

+0

此外,構造函數Cons的正文是一個函數類型'(a - > Bool)'。您只能爲Int,Bool,String,列表,對及其組合等一階類型派生Show。 –

相關問題