[Haskell-cafe] Tracing Prelude.read exceptions

Felipe Almeida Lessa felipe.lessa at gmail.com
Sun Dec 11 19:33:28 CET 2011


On Sun, Dec 11, 2011 at 4:19 PM, dokondr <dokondr at gmail.com> wrote:
> Hi,
> I got quite used to a sequence providing simple data persistence :
> 1) Store my data to a file:
> writeFile fileName (show someData)
>
> 2) Some time later read this data back:
> line <- readFile fileName
> let someData = read line :: SomeDataType

I can't help you with your question, but I suggest using safecopy [1]
even for simple cases.  It's *much* faster and also safer.  Also, it's
easy to use, just use

  L.writeFile fileName $ S.runPutLazy $ safePut someData

and

  ret <- S.runGetLazy safeGet <$> L.readFile fileName
  case ret of
    Left err -> print err
    Right someData -> ...

where

  import Control.Applicative ((<$>))
  import qualified Data.ByteString.Lazy as L -- [2]
  import qualified Data.Serialize.Get as S -- [3]
  import qualified Data.Serialize.Put as S -- [4]

Cheers,

[1] http://hackage.haskell.org/package/safecopy
[2] http://hackage.haskell.org/packages/archive/bytestring/0.9.2.0/doc/html/Data-ByteString-Lazy.html
[3] http://hackage.haskell.org/packages/archive/cereal/0.3.4.0/doc/html/Data-Serialize-Get.html
[4] http://hackage.haskell.org/packages/archive/cereal/0.3.4.0/doc/html/Data-Serialize-Put.html

-- 
Felipe.



More information about the Haskell-Cafe mailing list