相关疑难解决方法(0)

有什么区别.(点)和$(美元符号)?

(.)和美元符号有($)什么区别?据我了解,它们都是不需要使用括号的语法糖.

syntax haskell function-composition

682
推荐指数
10
解决办法
15万
查看次数

Haskell函数组合(.)和函数应用程序($)成语:正确使用

我一直在阅读真实世界的哈斯克尔,我即将结束,但风格问题一直在与我(.)($)操作员徘徊.

当你编写一个由其他函数组成的函数时,你可以这样写:

f = g . h
Run Code Online (Sandbox Code Playgroud)

但是当你在这些函数的末尾应用某些东西时,我会这样写:

k = a $ b $ c $ value
Run Code Online (Sandbox Code Playgroud)

但是这本书会像这样写:

k = a . b . c $ value
Run Code Online (Sandbox Code Playgroud)

现在,对我来说,他们看起来功能相同,他们在我眼中完全一样.然而,我看的越多,我就越看到人们以书的方式编写他们的函数:(.)首先构成,然后仅在最后使用($)附加值来评估该批次(没有人用很多美元组成) .

是否有理由使用比使用所有($)符号更好的书籍方式?或者这里有一些我没有得到的最​​佳实践?或者它是多余的,我根本不应该担心它?

haskell coding-style function-composition

124
推荐指数
5
解决办法
2万
查看次数

为什么f <$> g <$> x等价于(f.g)<$> x虽然<$>不是右关联的?

为什么f <$> g <$> x相当于(f . g) <$> x虽然<$>不是正确联想的?

(这种等价在普通的流行习语中是有效的$,但目前$是正确联想的!)

<*>具有相同的关联性和优先级<$>,但行为不同!

例:

Prelude Control.Applicative> (show . show) <$> Just 3
Just "\"3\""
Prelude Control.Applicative> show <$> show <$> Just 3
Just "\"3\""
Prelude Control.Applicative> pure show <*> pure show <*> Just 3

<interactive>:12:6:
    Couldn't match type `[Char]' with `a0 -> b0'
    Expected type: (a1 -> String) -> a0 -> b0
      Actual type: (a1 -> String) …
Run Code Online (Sandbox Code Playgroud)

syntax haskell infix-notation infix-operator applicative

12
推荐指数
1
解决办法
317
查看次数