Initial commit
This commit is contained in:
commit
c101616e62
309 changed files with 53937 additions and 0 deletions
200
bundled/Basement/Compat/NumLiteral.hs
Normal file
200
bundled/Basement/Compat/NumLiteral.hs
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
{-# LANGUAGE BangPatterns #-}
|
||||
{-# LANGUAGE DeriveDataTypeable #-}
|
||||
{-# LANGUAGE TypeFamilies #-}
|
||||
{-# LANGUAGE RebindableSyntax #-}
|
||||
{-# LANGUAGE NoImplicitPrelude #-}
|
||||
{-# Language CPP #-}
|
||||
-- |
|
||||
-- Module : Basement.Compat.NumLiteral
|
||||
-- License : BSD-style
|
||||
-- Maintainer : Foundation
|
||||
--
|
||||
-- Literal support for Integral and Fractional
|
||||
{-# LANGUAGE TypeSynonymInstances #-}
|
||||
{-# LANGUAGE FlexibleInstances #-}
|
||||
module Basement.Compat.NumLiteral
|
||||
( Integral(..)
|
||||
, Fractional(..)
|
||||
, HasNegation(..)
|
||||
) where
|
||||
|
||||
import Prelude (Int, Integer, Rational, Float, Double)
|
||||
import Data.Word (Word8, Word16, Word32, Word64, Word)
|
||||
import Data.Int (Int8, Int16, Int32, Int64)
|
||||
import Basement.Compat.C.Types
|
||||
import qualified Prelude
|
||||
import Basement.Compat.Natural
|
||||
import Foreign.Ptr (IntPtr)
|
||||
|
||||
-- | Integral Literal support
|
||||
--
|
||||
-- e.g. 123 :: Integer
|
||||
-- 123 :: Word8
|
||||
class Integral a where
|
||||
fromInteger :: Integer -> a
|
||||
|
||||
-- | Fractional Literal support
|
||||
--
|
||||
-- e.g. 1.2 :: Double
|
||||
-- 0.03 :: Float
|
||||
class Fractional a where
|
||||
fromRational :: Rational -> a
|
||||
|
||||
-- | Negation support
|
||||
--
|
||||
-- e.g. -(f x)
|
||||
class HasNegation a where
|
||||
negate :: a -> a
|
||||
|
||||
instance Integral Integer where
|
||||
fromInteger a = a
|
||||
instance Integral Natural where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Int where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Word where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Word8 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Word16 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Word32 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Word64 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Int8 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Int16 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Int32 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Int64 where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral IntPtr where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
|
||||
instance Integral Float where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral Double where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
|
||||
instance Integral CChar where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CSChar where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CUChar where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CShort where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CUShort where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CInt where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CUInt where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CLong where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CULong where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CPtrdiff where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CSize where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CWchar where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CSigAtomic where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CLLong where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CULLong where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
#if MIN_VERSION_base(4, 10, 0)
|
||||
instance Integral CBool where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
#endif
|
||||
instance Integral CIntPtr where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CUIntPtr where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CIntMax where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CUIntMax where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CClock where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CTime where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CUSeconds where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CSUSeconds where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral COff where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CFloat where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
instance Integral CDouble where
|
||||
fromInteger a = Prelude.fromInteger a
|
||||
|
||||
instance HasNegation Integer where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Int where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Int8 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Int16 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Int32 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Int64 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Word where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Word8 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Word16 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Word32 where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Word64 where
|
||||
negate = Prelude.negate
|
||||
|
||||
instance HasNegation Float where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation Double where
|
||||
negate = Prelude.negate
|
||||
|
||||
instance HasNegation CChar where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CSChar where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CShort where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CInt where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CLong where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CPtrdiff where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CWchar where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CLLong where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CIntMax where
|
||||
negate = Prelude.negate
|
||||
|
||||
instance HasNegation CFloat where
|
||||
negate = Prelude.negate
|
||||
instance HasNegation CDouble where
|
||||
negate = Prelude.negate
|
||||
|
||||
instance Fractional Rational where
|
||||
fromRational a = Prelude.fromRational a
|
||||
instance Fractional Float where
|
||||
fromRational a = Prelude.fromRational a
|
||||
instance Fractional Double where
|
||||
fromRational a = Prelude.fromRational a
|
||||
|
||||
instance Fractional CFloat where
|
||||
fromRational a = Prelude.fromRational a
|
||||
instance Fractional CDouble where
|
||||
fromRational a = Prelude.fromRational a
|
||||
Loading…
Add table
Add a link
Reference in a new issue