Haskellで次の線形代数ベクトルを書きました
data Natural where
Zero :: Natural
Succ :: Natural -> Natural
data Vector n e where
Nil :: Vector Zero e
(:|) :: (Show e, Num e) => e -> Vector n e -> Vector (Succ n) e
infixr :|
instance Foldable -- ... Vector ..., but how do I implement this?
を実装しようとすると、との定義が異なる (つまり、* と * -> *)Foldable
という問題に遭遇します。Zero
Succ
この問題の明白な解決策はありますか?