我想用以下的符号表示糖。但我不确定我是否做得对:
时:
quote = do
time <- qtime
qcomma
ask <- double
qcomma
bid <- double
qcomma
askVolume <- double
qcomma
bidVolume <- double
endOfLine
return $ Quote time ask bid askVolume bidVolume
和
quote = Quote <$> (qtime <* qcomma)
<*> (double <* qcomma)
<*> (double <* qcomma)
<*> (double <* qcomma)
<*> (double <* endOfLine)
相当于:
qtime >>= (\time -> qcomma)
>> double
>>= (\ ask -> qcomma)
>> double
>>= (\bid -> qcomma)
>> double
>>= (\askVolume -> qcomma)
>> double
>>= (\bidVolume -> endOfLine)
return (Quote time ask bid askVolume bidVolume )
感谢任何帮助!
答案 0 :(得分:6)
do
符号表示嵌套 lambdas,因为(例如)time
在do
块的其余部分的范围内,而不仅仅是首先致电qcomma
:
qtime >>= (
\time -> qcomma
>> double
>>= (\ ask -> qcomma
>> double
>>= (\bid -> qcomma
>> double
>>= (\askVolume -> qcomma
>> double
>>= (\bidVolume -> endOfLine
return (Quote time ask bid askVolume bidVolume ))))))
应用版本可能具有相同的效果,但不会对任何事情感到害怕。
从GHC 8开始,do
表示法可能 desugar to applicative code if(ApplicativeDo
打开并且)编译器可以确定>>=
isn& #39; t必要且更一般的Applicative
实例具有相同的含义。