haskell重定向

Ram*_*amy 2 f# haskell functional-programming

在F#工作让我了解Haskell.我目前正在教程的第7章,我强烈建议.但是问题很快.也许我已经领先于自己,我会在未来的章节中找到答案,但是,如果函数只接受F#中的一个参数,是否有一种方法可以反转函数的位置和它的参数.因此,例如,在F#中如果你有一个名为digitToInt的函数(就像在Haskell中那样),你可以执行以下操作:

3 |> digitToInt

我知道使用后退滴答,但这是专门用于二进制函数.一元函数有什么相似之处吗?

peo*_*oro 8

一种方法是定义一个(|>)接收值和函数的中缀函数,并调用函数传递给它的值如下:

(|>) :: a -> (a -> b) -> b
(|>) x f = f x
Run Code Online (Sandbox Code Playgroud)

然后你可以像在你的例子中一样使用它:

3 |> digitToInt
Run Code Online (Sandbox Code Playgroud)

  • 换句话说,`(|>)= flip($)` (8认同)

scl*_*clv 5

你可以做peoro建议的,它工作正常.但是,我建议不要这样做."读取"Haskell的正常方式就像一个句子 - 从左到右,动词在开头,主题在结尾.通常你会得到一个链式组合f . g. q . r $ x.通过monadic运算符,您可以获得f =<< g =<< x(或(f <=< g) =<< x)应用程序f <$> x <*> y <*> z.因此,扭转事物的正常顺序不一定是惯用的.

顺便说一句,我听说过,F#选择相反算子的原因是它与visualstudio自动完成功能非常吻合 - 如果你键入了你正在操作的值,那么它的类型可以确定选择什么可以操作它.这种工具支持非常棒,而且采用替代风格也是一个很好的理由.