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