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@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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe