去糖做符号
de sugaring do notation
我想把下面的符号脱糖。但我不确定我是否做对了:
是:
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 )
感谢任何帮助!
do
表示法将 嵌套 lambda 脱糖,因为(例如)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
符号 可能 脱糖到应用程序代码,如果(ApplicativeDo
已打开并且)编译器可以确定 >>=
不是必需的,更通用的 Applicative
实例具有相同的含义。
我想把下面的符号脱糖。但我不确定我是否做对了:
是:
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 )
感谢任何帮助!
do
表示法将 嵌套 lambda 脱糖,因为(例如)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
符号 可能 脱糖到应用程序代码,如果(ApplicativeDo
已打开并且)编译器可以确定 >>=
不是必需的,更通用的 Applicative
实例具有相同的含义。