Я пытаюсь объявить свои собственные данные с соответствующим преобразованием в качестве класса.Мой код выглядит следующим образом:
data SomeData = SInteger Integer | SElse deriving Show
class Some a where
toSome :: a -> SomeData
instance Some Int where toSome = SInteger . toInteger
main :: IO ()
main = print $ toSome 3
Но GHC (7.0.3) сердится и говорит:
Ambiguous type variable `a0' in the constraints:
(Some a0) arising from a use of `toSome'
at minimal_broken.hs:11:16-21
(Num a0) arising from the literal `3' at minimal_broken.hs:11:23
Probable fix: add a type signature that fixes these type variable(s)
Явная подпись типа (например, 3 :: Int) устраняет проблему,но это очень неудобно.
Стандартное «Шоу» работает просто отлично, и в соответствии с руководством оно объявлено точно так же.
Почему стандартное Шоу работает, а мой класс - нет?Я что-то пропустил?
PS: Явный "default (Int)" не разрешает это.