【发布时间】:2018-01-25 11:43:55
【问题描述】:
我有一个这样定义的类,所以foo 采用泛型类型并返回一个整数:
class Foo a where
foo :: a -> Integer
并定义了几个实例,使其适用于 Bool 和 Char 类型:
instance Foo Bool where
foo _ = 10
instance Foo Char where
foo _ = 20
如果我现在想为具有泛型类型的列表添加一个实例,我想做这样的事情:
instance Foo [a] where
foo (t:ts) = (foo t) + (foo ts)
但是,这是错误的。根据我目前的理解,我想假设 Haskell 推断类型并执行以下操作:
foo [False,True] -> foo False + foo True -> 10 + 10 = 20
我看过几本关于多态性和类型类的书籍,包括 Learn You a Haskell For Great Good!但还是不知道如何解决这个问题?
【问题讨论】:
-
为什么会出错?你忘记了基本情况。
-
我确实做到了。在我试图解决主要问题时忽略了它。
-
下一步是
data AnyFoo = forall a. Foo a => AnyFoo a和它的实例:)
标签: haskell generics typeclass