LINUX.ORG.RU

История изменений

Исправление 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