2011-02-14 60 views
2

我需要readFile版本的文本編碼作爲它的參數。我結束了以下內容:帶文本編碼參數的Haskell readFile

readFile' e name = openFile name ReadMode >>= (flip hSetEncoding $ e) >&&> hGetContents 

f >&&> g = \x -> f x >> g x 
  1. 有沒有更好的方式來做到這一點?
  2. 看起來像我定義爲>&&>應該是標準的東西,但我找不到它。

感謝,
亞當

回答

3

這是liftM2 (>>),進口Control.Monad.Instances。標準庫中沒有更簡潔的版本。

+0

或`liftA2(>>)`。我更喜歡`( - >)r`的應用實例。我不知道爲什麼。 :-P – luqui 2011-02-14 05:44:49

1

我認爲簡單的「do block」方法很好地表達了這一點,並不是說它更簡潔。

readFile'e name = do {h < - openFile name ReadMode; hSetEncoding h e; hGetContents h}

+0

也有用:`writeFile'e f txt = withFile f WriteMode(\ hdl - > hSetEncoding hdl e >> hPutStr hdl txt)` – Jules 2017-05-25 22:04:52