これが私のGADTです:
data Vector v where
Zero :: (Num a, Eq a, Show a) => Vector a
Scalar :: (Num a, Eq a, Show a) => a -> Vector a
Vector :: (Num a, Eq a, Show a) => [a] -> Vector [a]
TVector :: (Num a, Eq a, Show a) => [a] -> Vector [a]
基本的には、型クラス Num、Eq、および Show に属する要素を含むベクトルを表しています。
Vector 自体を Num にしたいので、次のようにします。
instance Num (Vector v) where
(Zero) + (Zero) = Zero
-- etc
(Vector a) * (Scalar b) = Vector $ map (* b) a -- This does not work
コードを実行すると、次のようになります。
Could not deduce (a ~ [a])
from the context (v ~ [a], Num a, Eq a, Show a)
bound by a pattern with constructor
Vector :: forall a. (Num a, Eq a, Show a) => [a] -> Vector [a],
in an equation for `*'
なぜこれが起こっているのですか、どうすれば修正できますか?