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

Simon Peter Nicholls simon at mintsource.org
Thu Jan 24 16:37:30 CET 2013


Ahhh, thank you. The following works:

    let meal = either (error "Mongoed") (>>= fromBson) eres


On Thu, Jan 24, 2013 at 4:24 PM, Kim-Ee Yeoh <ky3 at atamo.com> wrote:

> 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/6597a8f6/attachment.htm>


More information about the Beginners mailing list