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

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

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

所以,我请求示例:

  • 一个不是Functor的类型构造函数。

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

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

  • Monad的类型构造函数。

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

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

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


慕工程0101907
浏览 377回答 3
3回答

智慧大石

我的手机可能会让我的风格变得狭窄,但是现在这样。newtype&nbsp;Not&nbsp;x&nbsp;=&nbsp;Kill&nbsp;{kill&nbsp;::&nbsp;x&nbsp;->&nbsp;Void}不能是一个Functor。如果是,我们就有kill&nbsp;(fmap&nbsp;(const&nbsp;())&nbsp;(Kill&nbsp;id))&nbsp;()&nbsp;::&nbsp;Void月亮将由绿色奶酪制成。与此同时newtype&nbsp;Dead&nbsp;x&nbsp;=&nbsp;Oops&nbsp;{oops&nbsp;::&nbsp;Void}是一个算子instance&nbsp;Functor&nbsp;Dead&nbsp;where &nbsp;&nbsp;fmap&nbsp;f&nbsp;(Oops&nbsp;corpse)&nbsp;=&nbsp;Oops&nbsp;corpse但不能适用,或者我们有oops&nbsp;(pure&nbsp;())&nbsp;::&nbsp;Void和格林将由月亮奶酪制成(实际上可以发生,但只能在晚上)。(额外注意:Void,因为Data.Void是一个空的数据类型。如果你试图undefined证明它是一个Monoid,我会unsafeCoerce用来证明它不是。)欢悦,newtype&nbsp;Boo&nbsp;x&nbsp;=&nbsp;Boo&nbsp;{boo&nbsp;::&nbsp;Bool}在很多方面是适用的,例如Dijkstra会有的,instance&nbsp;Applicative&nbsp;Boo&nbsp;where &nbsp;&nbsp;pure&nbsp;_&nbsp;=&nbsp;Boo&nbsp;True &nbsp;&nbsp;Boo&nbsp;b1&nbsp;<*>&nbsp;Boo&nbsp;b2&nbsp;=&nbsp;Boo&nbsp;(b1&nbsp;==&nbsp;b2)但它不能是Monad。要明白为什么不这样做,请注意返回必须是持续的,Boo True或者Boo False因此join&nbsp;.&nbsp;return&nbsp;==&nbsp;id不可能举行。哦,是的,我差点忘了newtype&nbsp;Thud&nbsp;x&nbsp;=&nbsp;The&nbsp;{only&nbsp;::&nbsp;()}是Monad。滚动你自己。飞机赶上......
打开App,查看更多内容
随时随地看视频慕课网APP