
This is a better demonstration of the issue. I am going to open a GHC
bug report, as I can't see how this behavior is desirable.
{-# LANGUAGE OverloadedStrings #-}
import Data.Text as T
class NoDefault a where noDefault :: a -> Text
instance NoDefault T.Text where noDefault = id
main = print (noDefault "Hello!")
default.hs:7:15:
Ambiguous type variable `a0' in the constraints:
(NoDefault a0) arising from a use of `noDefault'
at default.hs:7:15-23
(Data.String.IsString a0) arising from the literal `"Hello!"'
at default.hs:7:25-32
Probable fix: add a type signature that fixes these type variable(s)
In the first argument of `print', namely `(noDefault "Hello!")'
In the expression: print (noDefault "Hello!")
In an equation for `main': main = print (noDefault "Hello!")
On Sat, Apr 21, 2012 at 7:51 PM, Greg Weber
my actual use case looks more like this:
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
import Data.Text as T
class ShowT a where showT :: a -> String
instance ShowT T.Text where showT = show
instance ShowT String where showT = show
main = print (showT "Hello!")
Ambiguous type variable `a0' in the constraints: (ShowT a0) arising from a use of `showT' at default.hs:16:15-19 (Data.String.IsString a0) arising from the literal `"Hello!"'
So I actually want to define a default instance for a typeclass I define that uses isString instances.
On Sat, Apr 21, 2012 at 6:24 PM, Daniel Peebles
wrote: I think it'll be hard to do that without putting Text in base, which I'm not sure anyone wants to do.
Dan
On Sat, Apr 21, 2012 at 8:20 PM, Greg Weber
wrote: I would like to default IsString to use the Text instance to avoid ambiguous type errors. I see defaulting capability is available for Num. Is there any way to do this for IsString?
Thanks, Greg Weber
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users