История изменений
Исправление Waterlaz, (текущая версия) :
Можно сделать что-то такое:
{-# LANGUAGE FlexibleInstances #-}
class Adder a where
(+^) :: a
instance Adder (Int -> Int -> Int) where
(+^) a b = a + b
instance Adder (Int -> Double -> Double) where
(+^) a b = (fromIntegral a) + b
И тогда:
*Main> (2 :: Int) +^ (3 :: Int) :: Int
5
*Main> (2 :: Int) +^ (3.0 :: Double) :: Double
5.0
Исходная версия Waterlaz, :
Можно сделать что-то такое:
{-# LANGUAGE FlexibleInstances #-}
class Adder a where
(+^) :: a
instance Adder (Int -> Int -> Int) where
(+^) a b = a + b
instance Adder (Int -> Double -> Double) where
(+^) a b = (fromIntegral a) + b
И тогда:
*Main> (2 :: Int) +^ (3 :: Int) :: Int
5
*Main> (2 :: Int) +^ (3 :: Int) :: Int
5
*Main> (2 :: Int) +^ (3.0 :: Double) :: Double
5.0