考虑这个表达式(取自Real World Haskell第8章,我试图简化)
isElfFile :: FilePath -> IO Bool
isElfFile path = return . hasElfMagic =<< L.readFile path
如何制作此功能的无点版本?我尝试使用其他绑定操作>>=
,解除hasElfMagic
,但似乎都没有。
答案 0 :(得分:8)
这里更简单,没有约束力:
isElfFile path = return . hasElfMagic =<< L.readFile path
isElfFile path = fmap hasElfMagic (L.readFile path)
isElfFile = fmap hasElfMagic . L.readFile
但当然也可以使用=<<
:
isElfFile path = return . hasElfMagic =<< L.readFile path
isElfFile path = (=<<) (return . hasElfMagic) (L.readFile path)
isElfFile = (=<<) (return . hasElfMagic) . L.readFile
isElfFile = (return . hasElfMagic =<<) . L.readFile
通常,在尝试使点无效之前,将中缀函数转换为前缀形式是有帮助的。