相关疑难解决方法(0)

不是Functor/Functor/Applicative/Monad的好例子?

在向某人解释什么是类型类X时,我很难找到正好是X的数据结构的好例子.

所以,我请求示例:

  • 一个不是Functor的类型构造函数.
  • 一个类型构造函数,它是一个Functor,但不是Applicative.
  • 一个类型构造函数,它是Applicative,但不是Monad.
  • Monad的类型构造函数.

我认为Monad到处都有很多例子,但Monad的一个很好的例子与之前的例子有一些关系可以完成图片.

我寻找彼此相似的示例,区别仅在于属于特定类型类的重要方面.

如果有人能够设法在这个层次结构的某个地方隐藏一个Arrow的例子(它是在Applicative和Monad之间吗?),那也会很棒!

monads haskell functor applicative

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

为什么Functor类没有返回功能?

从分类的角度来看,仿函数是一对两个映射(一个在对象之间,另一个在类别的箭头之间),遵循一些公理.

我假设,每个Functor实例与数学定义类似,即可以映射对象和函数,但Haskell的Functor类只有fmap映射函数的函数.

为什么这样?

UPD换句话说:

每个Monad类型M都有一个功能return :: a -> M a.

Functor类型F没有功能return :: a -> F a,只有F x构造函数.

math monads haskell functor category-theory

15
推荐指数
3
解决办法
933
查看次数

为什么fmap必须映射List的每个元素?

阅读了这本书,了解了一本Haskell For Great Good,以及非常有用的维基书籍Haskell分类理论帮助我克服了将类别对象与编程对象混淆的常见类别错误,我仍然有以下问题:

为什么必须fmap映射List的每个元素?

我喜欢它,我只想理解这在理论上是如何合理的.(或者更容易证明使用HoTT?)

在Scala表示法中,List是一个仿函数,它接受任何类型并将其映射到所有列表类型集合中的类型,例如,它将类型映射Int到类型List[Int],并将函数映射到Int例如

  • Int.successor: Int => IntFunctor[List].fmap(successor) : List[Int] => List[Int]
  • Int.toString: Int => StringFunctor[List].fmap(toString): List[Int] => List[String]

现在每个实例List[X]都是一个带有empty函数(mempty在Haskell中)和combine函数(mappend在Haskell中)的monoid .我的猜测是,人们可以使用列表是Monoids的事实,以表明map必须映射列表的所有元素.我的感觉是,如果添加了pureApplicative函数,这给了我们一个只包含其他类型元素的列表.例如Applicative[List[Int]].pure(1) == List(1).因为map(succ)在这些元素上给我们带有下一个元素的单例列表,所以这涵盖了所有这些子集.然后我想combine所有这些单身人士的功能都会给我们列出所有其他元素.不知怎的,我想这限制了地图的工作方式.

另一个暗示性的论点是map必须在列表之间映射函数.由于a中的每个元素List[Int]都是Int类型,并且如果一个映射到List[String]一个元素必须映射它的每个元素,或者一个元素不是正确的类型.

所以这两个论点似乎都指向了正确的方向.但我想知道剩下的方式需要什么.

反例? …

haskell functor category-theory scalaz scala-cats

11
推荐指数
1
解决办法
5748
查看次数

在类Functor的声明中,类型变量可以是函数类型吗?

在Haskell中,该类Functor声明为:

class   Functor f   where
fmap    ::  (a  ->  b)  ->  f   a   ->  f   b
Run Code Online (Sandbox Code Playgroud)

可以输入变量ab是函数类型,或者他们必须是非功能类型?

如果它们可以是函数类型,那么就可以使类应用于具有任意数量的参数的函数而言,类是否与class Functor有效地相同?根据赫顿在《 Haskell编程》中所说:Applicativefmap

函子抽象了fmap将功能映射到结构的每个元素上的想法 。应用程序将此想法概括为允许 fmap映射具有任意数量参数的映射函数,而不是仅限于具有单个参数的函数。

适用:

fmap0 ::  a   ->  f   a
fmap0 =   pure
fmap1 ::  (a  ->  b)  ->  f   a   ->  f   b
fmap1 g   x   =   pure    g   <*> x
fmap2 ::  (a  ->  b   ->  c)  ->  f   a   ->  f   b   -> …
Run Code Online (Sandbox Code Playgroud)

haskell functor applicative

5
推荐指数
3
解决办法
160
查看次数

为什么 Haskell 的 `Functor` 实例不定义一个“类似返回”的函数?

在范畴论中,函子是范畴之间的态射,即将范畴中的每个对象映射A到 中的另一个对象B,并将每个态射映射C -> D到 中的各个对象B,同时保留态射的组合。因此,我们可以说函子由两个“部分”组成,一个将对象映射到对象,另一个将态射映射到态射。在Haskell中,如果我理解正确的话,Functor类型类中的每个类型都可以“映射到”,即类型的函数a -> b可以映射到函数上F a -> F b。现在为什么不存在return :: Functor f => a -> f a专门用于 的函数Functor?是否没有必要,因为我们可以简单地利用实例return中的定义Monad,因为 return 实际上只对 Monad 的函子部分起作用,还是还有其他原因?

这让我觉得很奇怪,因为如果真是这样,为什么不return包含在Functor实例中?我的意思是每个单子都有一个函子部分,所以对我来说,这是有道理的。有人能在这方面启发我吗?

haskell category-theory

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