[Haskell-cafe] csv one-liner

Derek Elkins derek.a.elkins at gmail.com
Tue Sep 30 17:26:59 EDT 2008


On Tue, 2008-09-30 at 14:54 -0400, Graham Fawcett wrote:
> 2008/9/30 wman <666wman at gmail.com>:
> > I got asked how to do one particular thing in excel, which led to discssion
> > with "our local MSOffice expert".
> > During the discussion I stated that's it too much of a PITA and that I'd
> > rather write a script.
> > Long story short, I promised him a one-liner to "show the power and beauty
> > of Haskell".
> >
> > I got the csv package from hackage, modified the parseCSVFromFile so it's
> > returns IO CSV rather than IO (Either ParseError CSV), and finished with
> > following code
> >
> > (writeFile "output.csv") =<< (liftM printCSV $ liftM (map updateLine) $
> > parseCSVFromFile "input.csv")
> >
> > Is there room for improvement ?
> > Could it still be made into one-liner without modifying the csv module (and
> > without resorting to
> > case parseCSVFromFile "input.csv" of { Left _ -> []; Right x -> x}
> > kind of tricks) ?
> 
> How about:
> 
> parseCSVFromFile "in.csv" >>= return . either (const "error!")

Whenever you see this >>= return . f pattern think liftM or fmap or <$>.

> printCSV >>= writeFile "out.csv"

(either (const "error!") printCSV <$> parseCSVFromFile "in.csv") >>=
writeFile "out.csv"




More information about the Haskell-Cafe mailing list