[英]Using functors/applicatives on custom data types with multiple type classes?
考虑具有两个参数a和b的用户类型。 显然,这使用户可以由两种不同的类型组成:
data Users a b = User a b deriving (Show, Eq, Ord)
我们如何为该实例声明函子和应用函数?
我尝试过这些方法无法编译:
instance Functor Users where
fmap f(User a b) = User (f a) (f b)
instance Applicative Users where
pure a b = User a b
(<*>) User a b = (fmap a) (fmap b)
这些文件无法编译的原因是什么?
看一下Data.Bifunctor
中用于ADT的类型类,这两个函数都是函数性的。 然后, User
只是元组的一个奇特的名称,并且该名称已经支持这样的实例。 在Haskell中可以导出bifunctor实例。
@Bakuriu指出定义User
作为newtype
和使用扩展GeneralizedNewtypeDeriving
。
对于第二个,请参见Biapplicative
。 可以预期,其(,)
实例为:
instance Biapplicative (,) where
pure = (,)
ap (f, g) (a, b) = (f a, g b)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.