    {-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
    ----------------------------------------------------------------------
    -- |
    -- Module      :  Data.NumInstances.Function
    -- Copyright   :  (c) Conal Elliott 2008-2013
    -- License     :  BSD3
    --
    -- Maintainer  :  conal@conal.net
    -- Stability   :  experimental
    --
    -- Number class instances for functions
    ----------------------------------------------------------------------

    module Data.NumInstances.Function () where

    import Control.Applicative

    import Data.NumInstances.PreRequisites () -- Eq, Ord, Show, if necessary

    instance Num b => Num (a->b) where
      negate      = fmap negate
      (+)         = liftA2 (+)
      (*)         = liftA2 (*)
      fromInteger = pure . fromInteger
      abs         = fmap abs
      signum      = fmap signum

    instance Fractional b => Fractional (a->b) where
      recip        = fmap recip
      fromRational = pure . fromRational

    instance Floating b => Floating (a->b) where
      pi    = pure pi
      sqrt  = fmap sqrt
      exp   = fmap exp
      log   = fmap log
      sin   = fmap sin
      cos   = fmap cos
      asin  = fmap asin
      atan  = fmap atan
      acos  = fmap acos
      sinh  = fmap sinh
      cosh  = fmap cosh
      asinh = fmap asinh
      atanh = fmap atanh
      acosh = fmap acosh