【发布时间】:2015-04-22 04:08:11
【问题描述】:
给定一个类型,只有一种明显的方法可以实现 Additive 实例,从线性库到它。方便的是,Additive 有一个通用实现,所以我们可以使用deriving。不幸的是,这取决于一个Applicative 实例的存在,它是不可推导的,所以你仍然必须声明它:
{-# LANGUAGE DeriveGeneric, DeriveFunctor #-}
import Linear
import GHC.Generics
import Control.Applicative
data Foo a = Foo a a a deriving (Show, Functor, Generic1)
instance Additive Foo
instance Applicative Foo where
pure x = Foo x x x
Foo f g h <*> Foo x y z = Foo (f x) (g y) (h z)
main = print $ Foo 1 2 3 ^+^ Foo 4 5 6
有什么方法可以自动派生 Additive,而无需声明 Applicative 实例?
【问题讨论】:
标签: haskell generic-programming haskell-linear