real word haskell 中mapM 和 結合使用的乙個例項的解釋

時間 2021-06-03 12:50:49

1樓:閱千人而惜知己

函式的應用是左結合的,=<< 需要兩個引數,你只給乙個當然不對了。把中綴運算變成字首,加上括號應該是:

cc2cpp = (=<<) (mapM (renameWith (flip replaceExtension ".cpp"))) (namesMatching "*.cc")

namesMatching "*.cc" :: IO [FilePath]

flip replaceExtension ".cpp" :: FilePath -> FilePath

renameWith :: (FilePath -> FilePath) -> FilePath -> IO FilePath

mapM :: Monad m => (a -> m b) -> [a] -> m [b]

(mapM (renameWith (flip replaceExtension ".cpp"FilePath] -> IO [FilePath]

renameWith (flip replaceExtension ".cpp") :: FilePath -> IO FilePath

你還沒有搞清楚Haskell函式應用的規則。(=<<)才是這個表示式樹的最頂端。namesMatching "*.

cc" :: IO [FilePath]會得一系列的FilePath,=《只是把這些FilePath輸入到了(mapM (renameWith (flip replaceExtension ".cpp"))) 裡面,而(mapM (renameWith (flip replaceExtension ".

cpp"))) 會做什麼呢?會把每個檔名都重新命名。cc2cpp就是這樣組合起來的。

勸題主好好看看基礎的部分,理解一下Haskell的函式、運算子是高度統一的,還有運算子的結合性與優先順序。運算子有0~9,10個優先順序,函式應用的優先順序為10,比所有的運算子都高。

如何創作乙個結合蒸汽朋克,賽博朋克和魔幻的世界觀?

Designer 2077 只能看你對這三大風格的定義了。客觀上來說,基本不可能結合,因為蒸汽朋克技術是蒸氣機,差分機,與魔幻倒能沾上邊,但賽博朋克所使用的資訊科技與其差別過大。科技斷層明顯,即使創造乙個出來,也過於違合。如果你希望用蒸汽朋克來表現賽博朋克高科技,低生活,大財團掌控的主旨,倒是完全可...

想開乙個家具,家飾和甜品咖啡相結合的店?

不二 建議以家具家飾為主體經營,甜品可以作為配套服務,會讓顧客願意停留,只要乙個地方能讓顧客呆的住,就會增加銷售機會。而且家具家飾的利潤也會大於甜品,也不會像做甜品那麼累,況且現在到了一定年齡 收入可觀的人群,尤其是女性,都會很少吃甜品了,基本上都是忌甜,甜食是導致衰老的一大因素,要不pola抗糖為...

如何使用excel「分列」功能,把乙個框中的日期和時間分成兩列?

Romildo 很多人回答了,你沒有採納,據我估計,極有可能是因為你的 日期和時間 是公式生成的,或者是設定了自定義格式顯示出來的,而非文字格式,所以上述招數不靈。如果是這樣,你可以如是操作 假如資料在A1單元格,那麼在B1輸入公式 TEXT A1,mm dd yyyy hh mm 之後複製B1貼上...