[Haskell-cafe] a monad for secret information

Neil Mitchell ndmitchell at gmail.com
Tue Oct 10 08:49:20 EDT 2006


Hi,

I'm not sure what you are after, but:

data Secret a = Secret {password :: String, value :: a}

classify :: String -> a -> Secret a
classify = Secret

declassify :: String -> Secret a -> Maybe a
declassify guess (Secret pw v) | guess == pw = Just v
                                             | otherwise = Nothing

Put that in a module, do not export the Secret data type, and you're
good to go. I'm unsure what a Monad is giving you....

Thanks

Neil


On 10/10/06, Seth Gordon <sethg at ropine.com> wrote:
> Cale Gibbard wrote:
> > Why not just:
> >
> > secret :: a -> Classification String a
> > secret = Classification "xyzzy"
> >
> > The password string isn't part of the type, it doesn't even
> > necessarily exist at compile time. You might have just got confused
> > between type and data constructors for a moment.
> >
>
> But now I want to be able to process the secret monadically:
>
> mySecret =
>   secret "Jimmy Hoffa is buried under the 50-yd line in the Meadowlands"
>
> do secretData <- mySecret
>    return (length secretData)
>
> How do I define "return" so that it will put the password back, and how
> do I define "(>>=)" so that the password won't be accessible within the
> do-block?
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list