[Haskell-beginners] Can I lift this interestingly typed function into a Maybe?

Kim-Ee Yeoh ky3 at atamo.com
Thu Jan 24 16:24:55 CET 2013


On Thu, Jan 24, 2013 at 9:56 PM, Simon Peter Nicholls
<simon at mintsource.org>wrote:

> I'd like to convert this Maybe Document to a Maybe MyType without
> unpacking and repacking the Maybe. Is this possible?
>

That would be exactly

fmap :: (Document -> MyType) -> (Maybe Document -> Maybe MyType)

where I've instantiated the type variables for your use case.


> The fromBson function, that converts from a Document to an end user type,
> confuses me due to it's type:
>
>     fromBson :: Monad<http://hackage.haskell.org/packages/archive/base/4.5.0.0/doc/html/Control-Monad.html#t:Monad> m
> => Document<http://hackage.haskell.org/packages/archive/bson/0.1.7/doc/html/Data-Bson.html#t:Document> ->
> m a
>

All the small, single letters are type variables. Because they are
implicitly universally quantified; you, the caller, gets to specify what
you want them to be. Written out in full, it's actually

fromBson :: forall (m :: * -> *), a. Monad m => Document -> m a

Here, again specializing for your use case, fromBson probably needs to be
of type

fromBson :: Document -> Maybe MyType

So if you have a rightEres :: Maybe Document

then

fmap fromBson rightEres :: Maybe (Maybe MyType)

which you could then

join $ fmap fromBson rightEres :: Maybe MyType

What you're really after is the more idiomatic

rightEres >>= fromBson :: Maybe MyType

HTH,
-- Kim-Ee




>
> Thanks,
> Si
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130124/b0867d76/attachment.htm>


More information about the Beginners mailing list