Dan*_*Dos 9 monads haskell functor complex-numbers applicative
我是有点惊讶,当我读的情况下的源代码Applicative Complex和Monad Complex从GHC Data.Complex模块:
-- | @since 4.9.0.0
instance Applicative Complex where
pure a = a :+ a
f :+ g <*> a :+ b = f a :+ g b
liftA2 f (x :+ y) (a :+ b) = f x a :+ f y b
-- | @since 4.9.0.0
instance Monad Complex where
a :+ b >>= f = realPart (f a) :+ imagPart (f b)
Run Code Online (Sandbox Code Playgroud)
什么......?该Applicative Complex实例似乎将复数视为大小为二的数组.它们看起来更像是箭头操作.他们背后有数学基础吗?是否存在,它们用于什么?
编辑在底部添加注释:"线性"包.
这些实例是根据邮件列表帖子发起的Trac 10609票据添加的,其中Fumiaki Kinoshita注意到基本库中有一些似乎只能以一种方式定义的缺失实例,并提出了添加它们的补丁.
据我所知,添加它们没有数学动机,尽管至少有一个数学上有意义的操作可以用来表达,即标量乘法:
> pure (*) <*> pure 2 <*> (3 :+ 4)
6 :+ 8
>
Run Code Online (Sandbox Code Playgroud)
在上述邮件列表帖子的后续文章中,Edward Kmett指出他很赞成,因为他不得不多年来为Complex他的linear包裹添加孤儿实例以弥补丢失的情况.
看起来他发现它们在定义一个Additive实例时非常有用,Complex因此基本上可以创建一个Complex二维向量的特例.
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |