小编Арт*_*802的帖子

Haskell :: 如何创建任意长度的向量?

想要在 Haskell 中实现类型安全的矩阵乘法。定义如下:

{-# LANGUAGE TypeFamilies, DataKinds, GADTs  #-}
module Vector where

data Nat = Succ Nat | Zero

data Vector (n :: Nat) a where
    Nil :: Vector 'Zero a
    (:::) :: a -> Vector n a -> Vector (Succ n) a
type Matrix n m a = Vector m (Vector n a)

instance Foldable (Vector n) where
    foldr f b (a ::: as) = f a (foldr f b as)
    foldr _ b Nil = b

instance Functor …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell vector dependent-type type-level-computation

7
推荐指数
1
解决办法
219
查看次数

如何创建 list zipper 数据类型的 list zipper 的 comonad 实例?

我听说每个拉链都是一个共元,而我认为每个与其自身组成的拉链仍然是一个拉链,因此它是一个共元。所以我决定创建一个。

\n

我有以下拉链列表:

\n
{-# LANGUAGE DeriveFunctor #-}\n{-# LANGUAGE InstanceSigs #-}\nmodule ListZipper where\nimport Control.Comonad\nimport Data.List (unfoldr)\nimport Test.QuickCheck (Arbitrary (arbitrary))\n\ndata ListZipper a = ZList {previous :: [a], currentL :: a, next :: [a]} deriving (Functor, Eq)\n\ngoLeft, goRight :: ListZipper a -> Maybe (ListZipper a)\ngoLeft  (ZList (p:ps) cur ns) = Just $ ZList ps p (cur : ns)\ngoLeft _  = Nothing\ngoRight (ZList ps cur (n:ns)) = Just $ ZList (cur : ps) n ns\ngoRight _ = Nothing\n\nfork :: b -> (b, b)\nfork …
Run Code Online (Sandbox Code Playgroud)

haskell instance composition comonad

5
推荐指数
1
解决办法
79
查看次数