我一直在阅读真实世界的哈斯克尔,我即将结束,但风格问题一直在与我(.)和($)操作员徘徊.
当你编写一个由其他函数组成的函数时,你可以这样写:
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)
现在,对我来说,他们看起来功能相同,他们在我眼中完全一样.然而,我看的越多,我就越看到人们以书的方式编写他们的函数:(.)首先构成,然后仅在最后使用($)附加值来评估该批次(没有人用很多美元组成) .
是否有理由使用比使用所有($)符号更好的书籍方式?或者这里有一些我没有得到的最佳实践?或者它是多余的,我根本不应该担心它?
我必须谈谈Yesod(简单).是的,..我从来没有或真的很少使用haskell.大学讲师.....呵呵.
所以我读了一本关于yesod的书,在一些章节中,作者正在使用像<$>和的一些运算符<*>.有人可以用简单的话来解释,这个运营商做了什么?很难谷歌为那些字符和如果试图阅读Control.Applicative的文档,但说实话,它很难得到一个haskell初学者.
所以我希望任何人都有一个简单的答案:)
使用这些运算符的书的示例:
......
personForm :: Html -> MForm Handler (FormResult Person, Widget)
personForm = renderDivs $ Person
<$> areq textField "Name" Nothing
<*> areq (jqueryDayField def
{ jdsChangeYear = True -- give a year dropdown
, jdsYearRange = "1900:-5" -- 1900 till five years ago
}) "Birthday" Nothing
<*> aopt textField "Favorite color" Nothing
<*> areq emailField "Email address" Nothing
<*> aopt urlField "Website" Nothing
data Person = Person
{ personName :: Text
, …Run Code Online (Sandbox Code Playgroud)