点(.)和美元符号有($)什么区别?据我了解,它们都是不需要使用括号的语法糖.
我正在查看Cloud Haskell软件包的Encoding.hs,并遇到了一些奇怪的代码,我希望有人可以帮助我更好地理解.包括必要的代码:
class (Binary a,Typeable a) => Serializable a
instance (Binary a,Typeable a) => Serializable a
data Payload = Payload
{
payloadType :: !ByteString,
payloadContent :: !ByteString
} deriving (Typeable)
serialDecodePure :: (Serializable a) => Payload -> Maybe a
serialDecodePure a = (\id ->
let pc = payloadContent a
in pc `seq`
if (decode $! payloadType a) == show (typeOf $ id undefined)
then Just (id $! decode pc)
else Nothing ) id
Run Code Online (Sandbox Code Playgroud)
我只是好奇什么是$!(我猜测只是严格评估),还有为什么我们需要id技巧(懒惰评估的东西?).另外我特意遇到这条线的问题:
if (decode $! payloadType …Run Code Online (Sandbox Code Playgroud) 语境:
do state1 <- act state
dispatch $! state1
Run Code Online (Sandbox Code Playgroud)
是什么$!呢?
例如,为什么它不只是dispatch state1在这里?