March 26, 2012

я не знаю haskell #2

module Main where

class Apl a b where
  plus::a -> b -> c

instance Apl Int Int where
  plus a b = a + b

r = plus (1::Int) (2::Int)

main = putStrLn $ show r

С -XFlexibleInstances -XMultiParamTypeClasses нормально работает.

Меняем на 3 параметра класса типа:

class Apl a b c where
  plus::a -> b -> c

instance Apl Int Int Int where
  plus a b = a + b

No instance for (Apl Int Int a0)
arising from a use of `plus'
Possible fix: add an instance declaration for (Apl Int Int a0)
In the expression: plus (1 :: Int) (2 :: Int)
In an equation for `r': r = plus (1 :: Int) (2 :: Int)

чем его Int в качестве a0 не устраивает?

--updated--
Понятно, что я могу явно указать plus::Int->Int->Int
, но почему он сам это не делает?