我需要readFile
版本的文本編碼作爲它的參數。我結束了以下內容:帶文本編碼參數的Haskell readFile
readFile' e name = openFile name ReadMode >>= (flip hSetEncoding $ e) >&&> hGetContents
f >&&> g = \x -> f x >> g x
- 有沒有更好的方式來做到這一點?
- 看起來像我定義爲
>&&>
應該是標準的東西,但我找不到它。
感謝,
亞當
我需要readFile
版本的文本編碼作爲它的參數。我結束了以下內容:帶文本編碼參數的Haskell readFile
readFile' e name = openFile name ReadMode >>= (flip hSetEncoding $ e) >&&> hGetContents
f >&&> g = \x -> f x >> g x
>&&>
應該是標準的東西,但我找不到它。感謝,
亞當
這是liftM2 (>>)
,進口Control.Monad.Instances
。標準庫中沒有更簡潔的版本。
我認爲簡單的「do block」方法很好地表達了這一點,並不是說它更簡潔。
readFile'e name = do {h < - openFile name ReadMode; hSetEncoding h e; hGetContents h}
也有用:`writeFile'e f txt = withFile f WriteMode(\ hdl - > hSetEncoding hdl e >> hPutStr hdl txt)` – Jules 2017-05-25 22:04:52
或`liftA2(>>)`。我更喜歡`( - >)r`的應用實例。我不知道爲什麼。 :-P – luqui 2011-02-14 05:44:49