小编Mar*_*ett的帖子

固定长度和类型文字的列表

我正在尝试为Haskell中的固定长度列表定义一个类型.当我使用标准方式将自然数编码为一元中的类型时,一切正常.但是,当我尝试在GHC的类型文字上构建所有内容时,我遇到了大量问题.

我对所需列表类型的第一次拍摄是

data List (n :: Nat) a where
  Nil :: List 0 a
  (:>) :: a -> List n a -> List (n+1) a
Run Code Online (Sandbox Code Playgroud)

遗憾的是,它不允许使用类型编写zip函数

zip :: List n a -> List n b -> List n (a,b)
Run Code Online (Sandbox Code Playgroud)

我可以通过从类型变量n中的类型变量中减去1来解决这个问题(:>):

data List (n :: Nat) a where
  Nil :: List 0 a
  (:>) :: a -> List (n-1) a -> List n a -- subtracted 1 from both n's
Run Code Online (Sandbox Code Playgroud)

接下来,我尝试定义一个追加函数:

append :: List n1 a -> …
Run Code Online (Sandbox Code Playgroud)

haskell type-inference ghc

9
推荐指数
2
解决办法
747
查看次数

为什么Haskell中的仿函数上的monoids没有类型类?

我承认这个问题有点不明确,但我想知道为什么我从来没有偶然发现Haskell中的仿函数上的monoids类型类.我是否错过了它,是否有充分的理由要求这种缺席,还是完全归因于历史原因?恕我直言,下面的继承图表看起来有点奇怪没有右上角:

  Functor
     |
     V
Applicative ––> Alternative
     |               |
     V               V
   Monad    ––>  MonadPlus
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming functor typeclass monoids

4
推荐指数
1
解决办法
213
查看次数