我正在学习Haskell和Learn You a Haskell指南,并且我在一系列函数中坚持使用应用程序排序的例子.第11章:Functors,Applicative Functors和Monoids将sequenceA定义为:
sequenceA :: (Applicative f) => [f a] -> f [a]
sequenceA [] = pure []
sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
Run Code Online (Sandbox Code Playgroud)
我对sequenceA的这个示例用法感到有点困惑:
> sequenceA [(+3),(+2),(+1)] 3
[6,5,4]
Run Code Online (Sandbox Code Playgroud)
我已尽可能手动扩展应用程序,我认为是正确的:
(:) <$> (+3) <*> sequenceA [(+2), (+1)]
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> sequenceA []
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> pure []
(:) <$> (+3) <*> (:) …Run Code Online (Sandbox Code Playgroud) 根据另一个问题,Real World Haskell 的部分内容现已过时。我只阅读了第 5 章,但是我在将一个简单示例编译为可执行二进制文件时遇到了问题。
给出了两个模块:
module SimpleJSON
(
JValue(..)
, getString
, getInt
, getDouble
, getBool
, getObject
, getArray
, isNull
) where
data JValue = JString String
| JNumber Double
| JBool Bool
| JNull
| JObject [ (String, JValue) ]
| JArray [ JValue ]
deriving (Eq, Ord, Show)
getString :: JValue -> Maybe String
getString (JString s) = Just s
getString _ = Nothing
getInt (JNumber n) = Just (truncate n) …Run Code Online (Sandbox Code Playgroud)