2

我想用一个给定值的方法创建一个类型类 Size 来计算这个值中构造函数的数量。

class Size a where
  size :: a -> Int

instance Size Int where
  size a = 1

instance Size Bool where
  size b = 1

instance Size (c,d) where
  size (c,d) = 1 + Size c + Size d

example4 :: (Bool,(Int,Bool))
example4 = (True,(3,False))
main :: IO ()    
main = do
  print (size example4)

它应该给我值 5 但我收到错误消息Not in scope: data constructor `Size'

我想在实例中使用Size Int或,但不知道如何。Size BoolSize(c,d)

我的问题是我不知道如何解决它,因为我对 Haskell 还很陌生。

4

1 回答 1

4

你打错了:

size (c,d) = 1 + size c + size d

NoteSize被认为是一个数据构造函数,因为它有大写的 S。你需要的是函数size

此外,c并且d还需要是类中的Size类型,或者size不能在它们上调用

instance (Size c, Size d) => Size (c,d) where

所以要完成它是:

instance (Size c, Size d) => Size (c,d) where
  size (c,d) = 1 + size c + size d
于 2013-06-07T15:39:48.600 回答