[Haskell-cafe] Iteratee, parsec & co.
Valery V. Vorotyntsev
valery.vv at gmail.com
Tue Feb 9 10:08:48 EST 2010
| 3. Why Seek FileOffset is error message?
Are you talking about John Lato's implementation [1]?
Well, `Seek' is not an error message. It is one of constructors for
ErrMsg, and ErrMsg is [2]
> -- -- a message to the stream producer (e.g., to rewind the stream)
> -- or an error indication.
You know the overall idea behind Seek, don't you? It is an instrument
to implement random IO [3].
Compare Oleg's code [4]
> data SeekException = SeekException FileOffset
> deriving Show
>
> instance Typeable SeekException where
> typeOf _ = mkTyConApp (mkTyCon "SeekException") []
>
> instance Exception SeekException
and [2]
> type ErrMsg = SomeException
> data Stream el = EOF (Maybe ErrMsg) | Chunk [el] deriving Show
with John Lato's implementation [1]:
> data StreamG c el =
> EOF (Maybe ErrMsg)
> | Chunk (c el)
> data ErrMsg = Err String
> | Seek FileOffset
> deriving (Show, Eq)
John makes Err and Seek to be the distinct constructors of ErrMsg.
Errors (Err) in `iteratee' package are always Strings.
Oleg's ErrMsg is SomeException. One of its instances (SeekException)
is a ``rewind the stream'' message to the stream producer. And the user
is free to have as many different ErrMsg'es as he needs to do the job.
[1] http://inmachina.net/~jwlato/haskell/iteratee/src/Data/Iteratee/Base.hs
[2] http://okmij.org/ftp/Haskell/Iteratee/IterateeM.hs
[3] http://okmij.org/ftp/Streams.html#random-bin-IO
[4] http://okmij.org/ftp/Haskell/Iteratee/RandomIO.hs
--
vvv
More information about the Haskell-Cafe
mailing list