[Haskell-cafe] overloading functions

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Thu Jan 10 12:00:51 UTC 2019


On Thu, 10 Jan 2019 at 19:34, Damien Mattei <mattei at oca.eu> wrote:

> Hi,
>
> i have this definition:
>
> {-# LANGUAGE FlexibleInstances #-}
>
> class ConcatenateMaybeString a where
>   cms :: Maybe String -> a -> Maybe String
>
>
> instance  ConcatenateMaybeString (Maybe String) where
>      cms mf ms =
>        mf >>= (\f ->
>             ms >>= (\s ->
>                       return (f ++ s)))
>
>
>
> instance  ConcatenateMaybeString String where
>      cms mf s =
>        mf >>= (\f -> return (f ++ s))
>
> when i use it on :
> f `cms` ("." ::String) `cms` s
> it works
>
> but not on this:
> f `cms` "." `cms` s
>
> "." is too ambigious to compile:
>
> *Main> :load UpdateSidonie
> [1 of 1] Compiling Main             ( UpdateSidonie.hs, interpreted )
>
> UpdateSidonie.hs:373:43: error:
>     • Ambiguous type variable ‘a0’ arising from a use of ‘cms’
>       prevents the constraint ‘(ConcatenateMaybeString
>                                   a0)’ from being solved.
>       Probable fix: use a type annotation to specify what ‘a0’ should be.
>       These potential instances exist:
>         instance ConcatenateMaybeString (Maybe String)
>           -- Defined at UpdateSidonie.hs:169:11
>         instance ConcatenateMaybeString String
>           -- Defined at UpdateSidonie.hs:177:11
>     • In the first argument of ‘cms’, namely ‘f `cms` "."’
>       In the expression: f `cms` "." `cms` s
>       In the expression:
>         let
>           f = fmap head resBDwords
>           s = fmap (head . tail) resBDwords
>           mp = Just "." :: Maybe String
>           ....
>         in f `cms` "." `cms` s
>     |
> 373 |                                        in f `cms` "." `cms` s) ::
> Maybe String
>     |                                           ^^^^^^^^^^^
>
> UpdateSidonie.hs:373:51: error:
>     • Ambiguous type variable ‘a0’ arising from the literal ‘"."’
>       prevents the constraint ‘(Data.String.IsString
>                                   a0)’ from being solved.
>       Probable fix: use a type annotation to specify what ‘a0’ should be.
>       These potential instances exist:
>         instance Data.String.IsString Query
>           -- Defined in ‘Database.MySQL.Simple.Types’
>         instance Data.String.IsString Tx.Text -- Defined in ‘Data.Text’
>         instance (a ~ Char) => Data.String.IsString [a]
>           -- Defined in ‘Data.String’
>         ...plus six instances involving out-of-scope types
>         (use -fprint-potential-instances to see them all)
>     • In the second argument of ‘cms’, namely ‘"."’
>       In the first argument of ‘cms’, namely ‘f `cms` "."’
>       In the expression: f `cms` "." `cms` s
>     |
> 373 |                                        in f `cms` "." `cms` s) ::
> Maybe String
>     |                                                   ^^^
> Failed, no modules loaded.
> Prelude>
>
>
> any idea?
>

Do you have the OverloadedStrings or OverloadedLists LANGUAGE pragmas
enabled?


>
> Damien
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.



-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
http://IvanMiljenovic.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20190110/06e88935/attachment.html>


More information about the Haskell-Cafe mailing list