module DDF.InfDiff where
import DDF.DLang
import qualified DDF.Map as Map
import DDF.Combine ()
import DDF.Diff ()
instance DBI r => DBI (InfDiff r v) where
z = InfDiff z
s (InfDiff x) = InfDiff $ s x
abs (InfDiff x) = InfDiff $ abs x
app (InfDiff f) (InfDiff x) = InfDiff $ app f x
liftEnv (InfDiff x) = InfDiff $ liftEnv x
instance Dual r => Dual (InfDiff r v) where
dual = InfDiff dual
runDual = InfDiff runDual
instance Bimap r => Bimap (InfDiff r v) where
instance (Vector (InfDiff r v) v, Lang r) => Float (InfDiff r v) where
float = InfDiff . float
floatPlus = InfDiff floatPlus
floatMinus = InfDiff floatMinus
floatMult = InfDiff floatMult
floatDivide = InfDiff floatDivide
floatExp = InfDiff floatExp
instance (Vector (InfDiff r v) v, Dual r, Double r) => Double (InfDiff r v) where
double = InfDiff . double
doublePlus = InfDiff doublePlus
doubleMinus = InfDiff doubleMinus
doubleMult = InfDiff doubleMult
doubleDivide = InfDiff doubleDivide
doubleExp = InfDiff doubleExp
instance Char r => Char (InfDiff r v) where
char = InfDiff . char
instance Bool r => Bool (InfDiff r v) where
bool = InfDiff . bool
ite = InfDiff ite
instance Prod r => Prod (InfDiff r v) where
mkProd = InfDiff mkProd
zro = InfDiff zro
fst = InfDiff fst
instance Option r => Option (InfDiff r v) where
nothing = InfDiff nothing
just = InfDiff just
optionMatch = InfDiff optionMatch
instance Map.Map r => Map.Map (InfDiff r v) where
empty = InfDiff Map.empty
singleton = InfDiff Map.singleton
lookup = InfDiff Map.lookup
alter = InfDiff Map.alter
mapMap = InfDiff Map.mapMap
instance Unit r => Unit (InfDiff r v) where
unit = InfDiff unit
instance (Vector (InfDiff r v) v, Lang r) => Lang (InfDiff r v) where
fix = InfDiff fix
left = InfDiff left
right = InfDiff right
sumMatch = InfDiff sumMatch
exfalso = InfDiff exfalso
ioRet = InfDiff ioRet
ioBind = InfDiff ioBind
ioMap = InfDiff ioMap
writer = InfDiff writer
runWriter = InfDiff runWriter
nil = InfDiff nil
cons = InfDiff cons
listMatch = InfDiff listMatch
float2Double = InfDiff float2Double
double2Float = InfDiff double2Float
state = InfDiff state
runState = InfDiff runState
putStrLn = InfDiff putStrLn
instance (Vector (InfDiff r v) v, DLang r) => DLang (InfDiff r v) where