[Haskell-cafe] ANNOUNCE: hs-cryptohash 0.4

Brandon S Allbery KF8NH allbery at ece.cmu.edu
Fri Jul 2 11:01:17 EDT 2010

Hash: SHA1

On 7/2/10 07:23 , Vincent Hanquez wrote:
> I'm not sure exactly what the API would looks like, but I think basically you
> would enter/leave the state monad quite frequently in incremental mode,
> since the whole point of the incremental api is having this context built
> partially. for this reason, you end up with something really close to explicit
> state keeping, isn't it ?

You can do this if you need to (execState) but it's better to wrap the whole
thing in a State monad.  Think of it this way:  (flip runState) can be read
as "withContext":

> flip runState initContext $ do
>   -- do stuff, invoking update as needed to build the state

Although now that I think about it, if we're just appending to the state,
this should possibly be a Writer instead of a State; the interface is simpler.

Or to try to be a little more concrete about it:

> type HashContext = String
> -- build up a hash context incrementally, then hash it
> hashWithContext :: () -> Hash
> hashWithContext = hash . execWriter
> -- add a chunk to the hash context
> addToHash :: String -> Writer HashContext ()
> addToHash = tell

> -- use it
> messageHash = hashWithContext $ do
>   -- do something
>   addToHash  aLine
>   -- doSomethingElse
>   foldM addToHash [aListOfStuff]
>   -- ...

- -- 
brandon s. allbery     [linux,solaris,freebsd,perl]      allbery at kf8nh.com
system administrator  [openafs,heimdal,too many hats]  allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university      KF8NH
Version: GnuPG v2.0.10 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/


More information about the Haskell-Cafe mailing list