module Language.Fortran.Repr.Eval.Value.Op.Some where

import Language.Fortran.Repr.Value.Scalar.Common
import Language.Fortran.Repr.Value.Scalar.Int.Machine
import Language.Fortran.Repr.Value.Scalar.Real
import Language.Fortran.Repr.Value.Scalar.Complex

import Data.Int

someFIntUOpInplace'
    :: (Int8  -> Int8)
    -> (Int16 -> Int16)
    -> (Int32 -> Int32)
    -> (Int64 -> Int64)
    -> SomeFInt -> SomeFInt
someFIntUOpInplace' :: (Int8 -> Int8)
-> (Int16 -> Int16)
-> (Int32 -> Int32)
-> (Int64 -> Int64)
-> SomeFInt
-> SomeFInt
someFIntUOpInplace' Int8 -> Int8
k1f Int16 -> Int16
k2f Int32 -> Int32
k4f Int64 -> Int64
k8f (SomeFKinded FInt fk
i) = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$
    forall (k :: FTInt).
(Int8 -> Int8)
-> (Int16 -> Int16)
-> (Int32 -> Int32)
-> (Int64 -> Int64)
-> FInt k
-> FInt k
fIntUOpInplace' Int8 -> Int8
k1f Int16 -> Int16
k2f Int32 -> Int32
k4f Int64 -> Int64
k8f FInt fk
i

someFIntUOp'
    :: (Int8  -> r)
    -> (Int16 -> r)
    -> (Int32 -> r)
    -> (Int64 -> r)
    -> SomeFInt -> r
someFIntUOp' :: forall r.
(Int8 -> r)
-> (Int16 -> r) -> (Int32 -> r) -> (Int64 -> r) -> SomeFInt -> r
someFIntUOp' Int8 -> r
k1f Int16 -> r
k2f Int32 -> r
k4f Int64 -> r
k8f (SomeFKinded FInt fk
i) =
    forall r (k :: FTInt).
(Int8 -> r)
-> (Int16 -> r) -> (Int32 -> r) -> (Int64 -> r) -> FInt k -> r
fIntUOp' Int8 -> r
k1f Int16 -> r
k2f Int32 -> r
k4f Int64 -> r
k8f FInt fk
i

someFIntUOp
    :: (forall a. IsFInt a => a -> r)
    -> SomeFInt -> r
someFIntUOp :: forall r. (forall a. IsFInt a => a -> r) -> SomeFInt -> r
someFIntUOp forall a. IsFInt a => a -> r
f = forall r.
(Int8 -> r)
-> (Int16 -> r) -> (Int32 -> r) -> (Int64 -> r) -> SomeFInt -> r
someFIntUOp' forall a. IsFInt a => a -> r
f forall a. IsFInt a => a -> r
f forall a. IsFInt a => a -> r
f forall a. IsFInt a => a -> r
f

someFIntUOpWrap'
    :: (Int8  -> Int8)
    -> (Int16 -> Int16)
    -> (Int32 -> Int32)
    -> (Int64 -> Int64)
    -> SomeFInt -> SomeFInt
someFIntUOpWrap' :: (Int8 -> Int8)
-> (Int16 -> Int16)
-> (Int32 -> Int32)
-> (Int64 -> Int64)
-> SomeFInt
-> SomeFInt
someFIntUOpWrap' Int8 -> Int8
k1f  Int16 -> Int16
k2f  Int32 -> Int32
k4f  Int64 -> Int64
k8f  (SomeFKinded FInt fk
i) =
    forall r (k :: FTInt).
(Int8 -> r)
-> (Int16 -> r) -> (Int32 -> r) -> (Int64 -> r) -> FInt k -> r
fIntUOp'     Int8 -> SomeFInt
k1f' Int16 -> SomeFInt
k2f' Int32 -> SomeFInt
k4f' Int64 -> SomeFInt
k8f' FInt fk
i
  where
    k1f' :: Int8 -> SomeFInt
k1f' = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int8 -> FInt 'FTInt1
FInt1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int8 -> Int8
k1f
    k2f' :: Int16 -> SomeFInt
k2f' = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int16 -> FInt 'FTInt2
FInt2 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int16 -> Int16
k2f
    k4f' :: Int32 -> SomeFInt
k4f' = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> FInt 'FTInt4
FInt4 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> Int32
k4f
    k8f' :: Int64 -> SomeFInt
k8f' = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> FInt 'FTInt8
FInt8 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> Int64
k8f

someFIntUOpWrap
    :: (forall a. IsFInt a => a -> a)
    -> SomeFInt -> SomeFInt
someFIntUOpWrap :: (forall a. IsFInt a => a -> a) -> SomeFInt -> SomeFInt
someFIntUOpWrap forall a. IsFInt a => a -> a
f = (Int8 -> Int8)
-> (Int16 -> Int16)
-> (Int32 -> Int32)
-> (Int64 -> Int64)
-> SomeFInt
-> SomeFInt
someFIntUOpWrap' forall a. IsFInt a => a -> a
f forall a. IsFInt a => a -> a
f forall a. IsFInt a => a -> a
f forall a. IsFInt a => a -> a
f

someFIntBOp'
    :: (Int8  -> Int8  -> r)
    -> (Int16 -> Int16 -> r)
    -> (Int32 -> Int32 -> r)
    -> (Int64 -> Int64 -> r)
    -> SomeFInt -> SomeFInt -> r
someFIntBOp' :: forall r.
(Int8 -> Int8 -> r)
-> (Int16 -> Int16 -> r)
-> (Int32 -> Int32 -> r)
-> (Int64 -> Int64 -> r)
-> SomeFInt
-> SomeFInt
-> r
someFIntBOp' Int8 -> Int8 -> r
k1f Int16 -> Int16 -> r
k2f Int32 -> Int32 -> r
k4f Int64 -> Int64 -> r
k8f (SomeFKinded FInt fk
il) (SomeFKinded FInt fk
ir) =
    forall r (kl :: FTInt) (kr :: FTInt).
(Int8 -> Int8 -> r)
-> (Int16 -> Int16 -> r)
-> (Int32 -> Int32 -> r)
-> (Int64 -> Int64 -> r)
-> FInt kl
-> FInt kr
-> r
fIntBOp' Int8 -> Int8 -> r
k1f Int16 -> Int16 -> r
k2f Int32 -> Int32 -> r
k4f Int64 -> Int64 -> r
k8f FInt fk
il            FInt fk
ir

someFIntBOp
    :: (forall a. IsFInt a => a -> a -> r)
    -> SomeFInt -> SomeFInt -> r
someFIntBOp :: forall r.
(forall a. IsFInt a => a -> a -> r) -> SomeFInt -> SomeFInt -> r
someFIntBOp forall a. IsFInt a => a -> a -> r
f = forall r.
(Int8 -> Int8 -> r)
-> (Int16 -> Int16 -> r)
-> (Int32 -> Int32 -> r)
-> (Int64 -> Int64 -> r)
-> SomeFInt
-> SomeFInt
-> r
someFIntBOp' forall a. IsFInt a => a -> a -> r
f forall a. IsFInt a => a -> a -> r
f forall a. IsFInt a => a -> a -> r
f forall a. IsFInt a => a -> a -> r
f

someFIntBOpWrap'
    :: (Int8  -> Int8  -> Int8)
    -> (Int16 -> Int16 -> Int16)
    -> (Int32 -> Int32 -> Int32)
    -> (Int64 -> Int64 -> Int64)
    -> SomeFInt -> SomeFInt -> SomeFInt
someFIntBOpWrap' :: (Int8 -> Int8 -> Int8)
-> (Int16 -> Int16 -> Int16)
-> (Int32 -> Int32 -> Int32)
-> (Int64 -> Int64 -> Int64)
-> SomeFInt
-> SomeFInt
-> SomeFInt
someFIntBOpWrap' Int8 -> Int8 -> Int8
k1f  Int16 -> Int16 -> Int16
k2f  Int32 -> Int32 -> Int32
k4f  Int64 -> Int64 -> Int64
k8f =
    forall r.
(Int8 -> Int8 -> r)
-> (Int16 -> Int16 -> r)
-> (Int32 -> Int32 -> r)
-> (Int64 -> Int64 -> r)
-> SomeFInt
-> SomeFInt
-> r
someFIntBOp' Int8 -> Int8 -> SomeFInt
k1f' Int16 -> Int16 -> SomeFInt
k2f' Int32 -> Int32 -> SomeFInt
k4f' Int64 -> Int64 -> SomeFInt
k8f'
  where
    k1f' :: Int8 -> Int8 -> SomeFInt
k1f' Int8
l Int8
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Int8 -> FInt 'FTInt1
FInt1 forall a b. (a -> b) -> a -> b
$ Int8 -> Int8 -> Int8
k1f Int8
l Int8
r
    k2f' :: Int16 -> Int16 -> SomeFInt
k2f' Int16
l Int16
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Int16 -> FInt 'FTInt2
FInt2 forall a b. (a -> b) -> a -> b
$ Int16 -> Int16 -> Int16
k2f Int16
l Int16
r
    k4f' :: Int32 -> Int32 -> SomeFInt
k4f' Int32
l Int32
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Int32 -> FInt 'FTInt4
FInt4 forall a b. (a -> b) -> a -> b
$ Int32 -> Int32 -> Int32
k4f Int32
l Int32
r
    k8f' :: Int64 -> Int64 -> SomeFInt
k8f' Int64
l Int64
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Int64 -> FInt 'FTInt8
FInt8 forall a b. (a -> b) -> a -> b
$ Int64 -> Int64 -> Int64
k8f Int64
l Int64
r

someFIntBOpWrap
    :: (forall a. IsFInt a => a -> a -> a)
    -> SomeFInt -> SomeFInt -> SomeFInt
someFIntBOpWrap :: (forall a. IsFInt a => a -> a -> a)
-> SomeFInt -> SomeFInt -> SomeFInt
someFIntBOpWrap forall a. IsFInt a => a -> a -> a
f = (Int8 -> Int8 -> Int8)
-> (Int16 -> Int16 -> Int16)
-> (Int32 -> Int32 -> Int32)
-> (Int64 -> Int64 -> Int64)
-> SomeFInt
-> SomeFInt
-> SomeFInt
someFIntBOpWrap' forall a. IsFInt a => a -> a -> a
f forall a. IsFInt a => a -> a -> a
f forall a. IsFInt a => a -> a -> a
f forall a. IsFInt a => a -> a -> a
f

--------------------------------------------------------------------------------

someFRealBOp'
    :: (Float  -> Float  -> r)
    -> (Double -> Double -> r)
    -> SomeFReal -> SomeFReal -> r
someFRealBOp' :: forall r.
(Float -> Float -> r)
-> (Double -> Double -> r) -> SomeFReal -> SomeFReal -> r
someFRealBOp' Float -> Float -> r
k4f Double -> Double -> r
k8f (SomeFKinded FReal fk
l) (SomeFKinded FReal fk
r) =
    forall r (kl :: FTReal) (kr :: FTReal).
(Float -> Float -> r)
-> (Double -> Double -> r) -> FReal kl -> FReal kr -> r
fRealBOp' Float -> Float -> r
k4f Double -> Double -> r
k8f FReal fk
l             FReal fk
r

someFRealBOp
    :: (forall a. RealFloat a => a -> a -> r)
    -> SomeFReal -> SomeFReal -> r
someFRealBOp :: forall r.
(forall a. RealFloat a => a -> a -> r)
-> SomeFReal -> SomeFReal -> r
someFRealBOp forall a. RealFloat a => a -> a -> r
f = forall r.
(Float -> Float -> r)
-> (Double -> Double -> r) -> SomeFReal -> SomeFReal -> r
someFRealBOp' forall a. RealFloat a => a -> a -> r
f forall a. RealFloat a => a -> a -> r
f

someFRealBOpWrap'
    :: (Float  -> Float  -> Float)
    -> (Double -> Double -> Double)
    -> SomeFReal -> SomeFReal -> SomeFReal
someFRealBOpWrap' :: (Float -> Float -> Float)
-> (Double -> Double -> Double)
-> SomeFReal
-> SomeFReal
-> SomeFReal
someFRealBOpWrap' Float -> Float -> Float
k4f  Double -> Double -> Double
k8f =
    forall r.
(Float -> Float -> r)
-> (Double -> Double -> r) -> SomeFReal -> SomeFReal -> r
someFRealBOp' Float -> Float -> SomeFReal
k4f' Double -> Double -> SomeFReal
k8f'
  where
    k4f' :: Float -> Float -> SomeFReal
k4f' Float
l Float
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Float -> FReal 'FTReal4
FReal4 forall a b. (a -> b) -> a -> b
$ Float -> Float -> Float
k4f Float
l Float
r
    k8f' :: Double -> Double -> SomeFReal
k8f' Double
l Double
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Double -> FReal 'FTReal8
FReal8 forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double
k8f Double
l Double
r

someFRealBOpWrap
    :: (forall a. RealFloat a => a -> a -> a)
    -> SomeFReal -> SomeFReal -> SomeFReal
someFRealBOpWrap :: (forall a. RealFloat a => a -> a -> a)
-> SomeFReal -> SomeFReal -> SomeFReal
someFRealBOpWrap forall a. RealFloat a => a -> a -> a
f = (Float -> Float -> Float)
-> (Double -> Double -> Double)
-> SomeFReal
-> SomeFReal
-> SomeFReal
someFRealBOpWrap' forall a. RealFloat a => a -> a -> a
f forall a. RealFloat a => a -> a -> a
f

someFRealUOp'
    :: (Float  -> r)
    -> (Double -> r)
    -> SomeFReal -> r
someFRealUOp' :: forall r. (Float -> r) -> (Double -> r) -> SomeFReal -> r
someFRealUOp' Float -> r
k4f Double -> r
k8f (SomeFKinded FReal fk
x) =
    forall r (k :: FTReal).
(Float -> r) -> (Double -> r) -> FReal k -> r
fRealUOp' Float -> r
k4f Double -> r
k8f FReal fk
x

someFRealUOp
    :: (forall a. RealFloat a => a -> r)
    -> SomeFReal -> r
someFRealUOp :: forall r. (forall a. RealFloat a => a -> r) -> SomeFReal -> r
someFRealUOp forall a. RealFloat a => a -> r
f = forall r. (Float -> r) -> (Double -> r) -> SomeFReal -> r
someFRealUOp' forall a. RealFloat a => a -> r
f forall a. RealFloat a => a -> r
f

someFRealUOpWrap'
    :: (Float  -> Float)
    -> (Double -> Double)
    -> SomeFReal -> SomeFReal
someFRealUOpWrap' :: (Float -> Float) -> (Double -> Double) -> SomeFReal -> SomeFReal
someFRealUOpWrap' Float -> Float
k4f  Double -> Double
k8f =
    forall r. (Float -> r) -> (Double -> r) -> SomeFReal -> r
someFRealUOp' Float -> SomeFReal
k4f' Double -> SomeFReal
k8f'
  where
    k4f' :: Float -> SomeFReal
k4f' = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> FReal 'FTReal4
FReal4 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Float
k4f
    k8f' :: Double -> SomeFReal
k8f' = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> FReal 'FTReal8
FReal8 forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Double
k8f

someFRealUOpWrap
    :: (forall a. RealFloat a => a -> a)
    -> SomeFReal -> SomeFReal
someFRealUOpWrap :: (forall a. RealFloat a => a -> a) -> SomeFReal -> SomeFReal
someFRealUOpWrap forall a. RealFloat a => a -> a
f = (Float -> Float) -> (Double -> Double) -> SomeFReal -> SomeFReal
someFRealUOpWrap' forall a. RealFloat a => a -> a
f forall a. RealFloat a => a -> a
f

--------------------------------------------------------------------------------

someFComplexBOp'
    :: (Float  -> Float  -> a)
    -> (a -> a -> r)
    -> (Double -> Double -> b)
    -> (b -> b -> r)
    -> SomeFComplex -> SomeFComplex -> r
someFComplexBOp' :: forall a r b.
(Float -> Float -> a)
-> (a -> a -> r)
-> (Double -> Double -> b)
-> (b -> b -> r)
-> SomeFComplex
-> SomeFComplex
-> r
someFComplexBOp' Float -> Float -> a
k8f a -> a -> r
k8g Double -> Double -> b
k16f b -> b -> r
k16g (SomeFKinded FComplex fk
l) (SomeFKinded FComplex fk
r) =
    forall a r b (kl :: FTReal) (kr :: FTReal).
(Float -> Float -> a)
-> (a -> a -> r)
-> (Double -> Double -> b)
-> (b -> b -> r)
-> FComplex kl
-> FComplex kr
-> r
fComplexBOp' Float -> Float -> a
k8f a -> a -> r
k8g Double -> Double -> b
k16f b -> b -> r
k16g FComplex fk
l                FComplex fk
r

someFComplexBOp
    :: (forall a. RealFloat a => a -> a -> b)
    -> (b -> b -> r)
    -> SomeFComplex -> SomeFComplex -> r
someFComplexBOp :: forall b r.
(forall a. RealFloat a => a -> a -> b)
-> (b -> b -> r) -> SomeFComplex -> SomeFComplex -> r
someFComplexBOp forall a. RealFloat a => a -> a -> b
f b -> b -> r
g = forall a r b.
(Float -> Float -> a)
-> (a -> a -> r)
-> (Double -> Double -> b)
-> (b -> b -> r)
-> SomeFComplex
-> SomeFComplex
-> r
someFComplexBOp' forall a. RealFloat a => a -> a -> b
f b -> b -> r
g forall a. RealFloat a => a -> a -> b
f b -> b -> r
g

someFComplexBOpWrap'
    :: (Float  -> Float  -> Float)
    -> (Double -> Double -> Double)
    -> SomeFComplex -> SomeFComplex -> SomeFComplex
someFComplexBOpWrap' :: (Float -> Float -> Float)
-> (Double -> Double -> Double)
-> SomeFComplex
-> SomeFComplex
-> SomeFComplex
someFComplexBOpWrap' Float -> Float -> Float
k8f     Double -> Double -> Double
k16f =
    forall a r b.
(Float -> Float -> a)
-> (a -> a -> r)
-> (Double -> Double -> b)
-> (b -> b -> r)
-> SomeFComplex
-> SomeFComplex
-> r
someFComplexBOp' Float -> Float -> Float
k8f Float -> Float -> SomeFComplex
k8g Double -> Double -> Double
k16f Double -> Double -> SomeFComplex
k16g
  where
    k8g :: Float -> Float -> SomeFComplex
k8g  Float
l Float
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Float -> Float -> FComplex 'FTReal4
FComplex8  Float
l Float
r
    k16g :: Double -> Double -> SomeFComplex
k16g Double
l Double
r = forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Double -> Double -> FComplex 'FTReal8
FComplex16 Double
l Double
r

someFComplexBOpWrap
    :: (forall a. RealFloat a => a -> a -> a)
    -> SomeFComplex -> SomeFComplex -> SomeFComplex
someFComplexBOpWrap :: (forall a. RealFloat a => a -> a -> a)
-> SomeFComplex -> SomeFComplex -> SomeFComplex
someFComplexBOpWrap forall a. RealFloat a => a -> a -> a
f = (Float -> Float -> Float)
-> (Double -> Double -> Double)
-> SomeFComplex
-> SomeFComplex
-> SomeFComplex
someFComplexBOpWrap' forall a. RealFloat a => a -> a -> a
f forall a. RealFloat a => a -> a -> a
f

someFComplexFromReal :: SomeFReal -> SomeFComplex
someFComplexFromReal :: SomeFReal -> SomeFComplex
someFComplexFromReal (SomeFKinded FReal fk
r) =
    case FReal fk
r of
      FReal4 Float
x -> forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Float -> Float -> FComplex 'FTReal4
FComplex8  Float
x Float
0.0
      FReal8 Double
x -> forall k (ft :: k -> *) (fk :: k).
(SingKind k, SingI fk) =>
ft fk -> SomeFKinded k ft
SomeFKinded forall a b. (a -> b) -> a -> b
$ Double -> Double -> FComplex 'FTReal8
FComplex16 Double
x Double
0.0