相关疑难解决方法(0)

Monoidal Functor是适用的,但是Applicative定义中的Monoid类型类是什么?

适用于Monoidal Functor:

mappend :: f         -> f   -> f
$       ::  (a -> b) ->   a ->   b
<*>     :: f(a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

但是我没有在应用类型类的定义中看到有关Monoid的任何参考,你能告诉我为什么吗?

定义:

class Functor f => Applicative (f :: * -> *) where
  pure :: a -> f a
  (<*>) :: f (a -> b) -> f a -> f b
  GHC.Base.liftA2 :: (a -> b -> c) -> f a -> f b -> f c
  (*>) :: f a …
Run Code Online (Sandbox Code Playgroud)

haskell applicative

12
推荐指数
3
解决办法
855
查看次数

玫瑰树的初始代数

据我明白,从Haskell的递归数据类型对应于endofunctors的初始代数从Hask类别[ 1,2 ].例如:

  • 自然数,data Nat = Zero | Succ Nat对应于endofunctor的初始代数F(-) = 1 + (-).
  • 列表,data List a = Nil | Cons a (List a)对应于endofunctor的初始代数F(A, -) = 1 + A × (-).

但是,我不清楚对应玫瑰树的endofunctor应该是什么:

data Rose a = Node a (List (Rose a))
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,有两个递归:一个用于玫瑰树,另一个用于列表.根据我的计算,我会得到以下仿函数,但它似乎不正确:

F(A, •, -) = A × (1 + (-) × (•))
Run Code Online (Sandbox Code Playgroud)

或者,可以将玫瑰树定义为相互递归的数据类型:

data Rose a   = Node a (Forest a)
type Forest a = List (Rose …
Run Code Online (Sandbox Code Playgroud)

recursion haskell algebra algebraic-data-types category-theory

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

Haskell中的所有类型类都有类别理论模拟吗?

考虑一个类型类,其成员类型* -> *.例如:Functor类型类.众所周知,在Haskell中,这种类型类与其数学(即类别理论)类似物之间存在对应关系.归纳:

问题1: Haskell中每个成员都是类型的每个类型类都* -> *对应于类别之间的某些功能吗?

现在考虑一个类型为类型的类型类*.例如,可以想象一个类型类Group对应于组的类别(从技术上讲,Group它将是Hask其对象包含所有Haskell类型的子类别).归纳:

问题2: Haskell中每个成员类型的类型类是否*对应于某个类别(技术上:某些子类别Hask)?

由此,可以问下一个一般性问题:

问题3:类型的类型是否等于或高于* -> * -> *某些类别理论概念?

实际上,整个问题可归纳如下:

一般问题:每个Haskell类型类都对应于某种类别的理论概念吗?

编辑:至少,似乎你可以说,因为每个类型类都包含一些Haskell类型作为其成员,你可以将每个类型类视为一些子类Hask(关闭.和利用id).

haskell category-theory

8
推荐指数
2
解决办法
986
查看次数