[Haskell] Mixing monadic and non-monadic functions

Keean Schupke k.schupke at imperial.ac.uk
Fri Sep 9 07:39:29 EDT 2005


Malcolm Wallace wrote:

>Wolfgang Jeltsch <wolfgang at jeltsch.net> writes:
>
>  
>
>>>I'm not sure exactly what you have in mind. Obviously I want something
>>>that applies to all functions, with any number of arguments, and not
>>>just (+). Furthermore, it should handle cases like 1+[2,3] where only
>>>one value is monadic.
>>>      
>>>
>>I doubt that it is a good thing to extend the language in a way that such
>>far  reaching declarations are automatically generated.
>>    
>>
>
>I agree.  The original request was for something like
>    [1,2] + [3,4]
>to be automatically lifted into a monad.  But surely it is not too
>difficult to define the required behaviour precisely (and only)
>where needed, e.g.
>
>    (+.) = liftM2 (+)
>
>    [1,2] +. [3,4]
>
>  
>
Why not make the monad an instance of Num, then you do not proliferate 
meaningless
similar symbols... besides which I am sure all the good ones are used in 
libraries already
(like +. <+> etc) ;)

instance (Monad m, Show a) => Show (m a)
   ...
instance (Monad m, Ord a) => Ord (m a)
   ...
instance (Monad m, Num a,Show (m a),Ord (m a)) -> Num (m a) where
    (+) = liftM2 (+)

The instances for Show and Ord can be empty if you don't need the 
functionality...

    Regards,
    Keean.


More information about the Haskell mailing list