Bab*_*ham 2 haskell functor custom-data-type applicative
考虑具有两个参数a和b的Users类型.显然,这使用户可以由两种不同的类型组成:
data Users a b = User a b deriving (Show, Eq, Ord)
Run Code Online (Sandbox Code Playgroud)
我们如何声明这个实例的仿函数和应用程序?
我试过这些方法不会编译:
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)
Run Code Online (Sandbox Code Playgroud)
这些不能编译的原因是什么?
看看Data.BifunctorADT的类型类,它们都是两个参数中的函数.User那么它只是元组的一个奇特名称,这已经支持了这样一个实例.在Haskell中可以派生一个bifunctor实例.
@Bakuriu建议定义User为a newtype和使用扩展名GeneralizedNewtypeDeriving.
对于第二个,请参阅Biapplicative.正如所料,其实例(,)是:
instance Biapplicative (,) where
pure = (,)
ap (f, g) (a, b) = (f a, g b)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |