module DDF.UnHOAS where
import DDF.Lang
import qualified DDF.Map as Map
import qualified DDF.VectorTF as VTF
newtype UnHOAS repr h x = UnHOAS {runUnHOAS :: repr h x}
instance DBI repr => DBI (UnHOAS repr) where
z = UnHOAS z
s (UnHOAS x) = UnHOAS $ s x
abs (UnHOAS x) = UnHOAS $ abs x
app (UnHOAS f) (UnHOAS x) = UnHOAS $ app f x
instance Bool r => Bool (UnHOAS r) where
bool = UnHOAS . bool
ite = UnHOAS ite
instance Char r => Char (UnHOAS r) where
char = UnHOAS . char
instance Prod r => Prod (UnHOAS r) where
mkProd = UnHOAS mkProd
zro = UnHOAS zro
fst = UnHOAS fst
instance Double r => Double (UnHOAS r) where
double = UnHOAS . double
doublePlus = UnHOAS doublePlus
doubleMinus = UnHOAS doubleMinus
doubleMult = UnHOAS doubleMult
doubleDivide = UnHOAS doubleDivide
doubleExp = UnHOAS doubleExp
doubleEq = UnHOAS doubleEq
instance Float r => Float (UnHOAS r) where
float = UnHOAS . float
floatPlus = UnHOAS floatPlus
floatMinus = UnHOAS floatMinus
floatMult = UnHOAS floatMult
floatDivide = UnHOAS floatDivide
floatExp = UnHOAS floatExp
instance Option r => Option (UnHOAS r) where
nothing = UnHOAS nothing
just = UnHOAS just
optionMatch = UnHOAS optionMatch
instance Map.Map r => Map.Map (UnHOAS r) where
empty = UnHOAS Map.empty
singleton = UnHOAS Map.singleton
alter = UnHOAS Map.alter
lookup = UnHOAS Map.lookup
mapMap = UnHOAS Map.mapMap
unionWith = UnHOAS Map.unionWith
instance Bimap r => Bimap (UnHOAS r) where
size = UnHOAS size
insert = UnHOAS insert
lookupL = UnHOAS lookupL
toMapL = UnHOAS toMapL
lookupR = UnHOAS lookupR
toMapR = UnHOAS toMapR
empty = UnHOAS empty
singleton = UnHOAS singleton
updateL = UnHOAS updateL
updateR = UnHOAS updateR
instance Dual r => Dual (UnHOAS r) where
dual = UnHOAS dual
runDual = UnHOAS runDual
instance Unit r => Unit (UnHOAS r) where
unit = UnHOAS unit
instance Sum r => Sum (UnHOAS r) where
left = UnHOAS left
right = UnHOAS right
sumMatch = UnHOAS sumMatch
instance Int r => Int (UnHOAS r) where
int = UnHOAS . int
pred = UnHOAS pred
isZero = UnHOAS isZero
instance Y r => Y (UnHOAS r) where
y = UnHOAS y
instance Functor r x => Functor (UnHOAS r) x where
map = UnHOAS map
instance Applicative r x => Applicative (UnHOAS r) x where
pure = UnHOAS pure
ap = UnHOAS ap
instance Monad r x => Monad (UnHOAS r) x where
join = UnHOAS join
bind = UnHOAS bind
instance IO r => IO (UnHOAS r) where
putStrLn = UnHOAS putStrLn
instance List r => List (UnHOAS r) where
nil = UnHOAS nil
cons = UnHOAS cons
listMatch = UnHOAS listMatch
instance VTF.VectorTF r => VTF.VectorTF (UnHOAS r) where
zero = UnHOAS VTF.zero
basis = UnHOAS VTF.basis
plus = UnHOAS VTF.plus
mult = UnHOAS VTF.mult
vtfMatch = UnHOAS VTF.vtfMatch
instance DiffWrapper r => DiffWrapper (UnHOAS r) where
diffWrapper = UnHOAS diffWrapper
runDiffWrapper = UnHOAS runDiffWrapper
instance Fix r => Fix (UnHOAS r) where
fix = UnHOAS fix
runFix = UnHOAS runFix
instance FreeVector r => FreeVector (UnHOAS r) where
freeVector = UnHOAS freeVector
runFreeVector = UnHOAS runFreeVector
instance Lang r => Lang (UnHOAS r) where
float2Double = UnHOAS float2Double
exfalso = UnHOAS exfalso
writer = UnHOAS writer
runWriter = UnHOAS runWriter
double2Float = UnHOAS double2Float
state = UnHOAS state
runState = UnHOAS runState