小编Sen*_*agi的帖子

有人可以向我解释为什么ArrowApply的应用功能使它们像monad一样强大吗?

所以我将我的问题分成4个部分,但首先是一些背景:

我对Monads感觉相对舒服,但对Arrows不太满意.我想我遇到的主要问题是,我看不出它们对它们有用.无论形式是否正确,我都理解Monads是一种工具,可以让我们从计算中引入副作用.因为它们将程序片段从纯值推广到用其他动作装箱的值.从我的霰弹枪"阅读所有论文"的方法来学习箭头,我遇到了两个相互矛盾的观点:

答:箭头比Monads更强大/是Monads的概括.haskell wiki的开头是"他们可以做monad所能做的一切,甚至更多.它们与具有静态组件的monad大致相当."

B.箭头是Monads的子集使用ArrowApply我们可以定义monad

  1. 观点A有什么道理吗?
  2. 箭头没有什么样的功能,我读过它与组合有什么区别,那么>>>运算符允许我们做什么>> =不?
  3. 应用究竟做了什么?它的类型甚至没有( - >)
  4. 为什么我们想要在monad上使用适用的箭头?

monads haskell functional-programming arrows

25
推荐指数
2
解决办法
1662
查看次数

有人可以解释((.)$(.))(==)1(1+)0的含义

haskell.org上,我遇到了这个自由风格的功能,被称为"猫头鹰".

((.)$(.))
Run Code Online (Sandbox Code Playgroud)

它的类型签名是 (a -> b -> c) -> a -> (a1 -> b) -> a1 -> c.

这相当于 f a b c d = a b (c d) 并且显然是 ((.)$(.)) (==) 1 (1+) 0 回报True.

所以我的问题是:

  1. 什么是a1在类型签名是什么意思?它与a?有关吗?
  2. (==)某种函数相等运算符?因为0 (==) 0在GHCi中抛出错误.
  3. 1 (1+) 0在这种情况下意味着什么?我不知道这甚至是一个有效的表达方式.
  4. 为什么表达式会返回True

syntax haskell pointfree

7
推荐指数
1
解决办法
1020
查看次数

可以在多项式上使用定点函数吗?

我想到了一种在Haskell中表示代数数字作为近似流的方法.您可以通过一些根查找算法来完成此操作.但那没什么好玩的.所以你可以添加x多项式,减少问题,找到它的固定点.

所以如果你在Haskell中有一个函数就好

f :: Double -> Double
f x = x ^ 2 + x
Run Code Online (Sandbox Code Playgroud)

我从概念上理解为什么修复不起作用,也就是说,我可以很容易地验证它不起作用,但不是真正的最不固定的f?还有另一个简单的(如定义大小)定点函数可以工作吗?

haskell functional-programming algebra

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