Với một kiểu, chỉ có một cách rõ ràng để thực hiện một cá thể Additive
, từ thư viện Tuyến tính, đến thư mục đó. Thuận tiện, Additive
có cài đặt chung, vì vậy chúng tôi có thể sử dụng deriving
cho nó. Thật không may, nó phụ thuộc vào sự tồn tại của một Applicative
dụ, mà không phải là derivable, vì vậy bạn vẫn phải khai báo nó:Làm thế nào để lấy được Phụ gia chung trên Haskell, mà không định nghĩa một cá thể Ứng dụng?
{-# 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
Có cách nào để lấy được Additive tự động, mà không cần phải khai báo một thể hiện applicative?