{-# LANGUAGE NoImplicitPrelude #-} module DDF.UnHOAS where import DDF.Lang import qualified DDF.Map as Map 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 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 instance Bimap r => Bimap (UnHOAS r) where instance Dual r => Dual (UnHOAS r) where dual = UnHOAS dual runDual = UnHOAS runDual instance Lang r => Lang (UnHOAS r) where float2Double = UnHOAS float2Double fix = UnHOAS fix left = UnHOAS left right = UnHOAS right sumMatch = UnHOAS sumMatch unit = UnHOAS unit exfalso = UnHOAS exfalso ioRet = UnHOAS ioRet ioBind = UnHOAS ioBind nil = UnHOAS nil cons = UnHOAS cons listMatch = UnHOAS listMatch ioMap = UnHOAS ioMap writer = UnHOAS writer runWriter = UnHOAS runWriter double2Float = UnHOAS double2Float state = UnHOAS state runState = UnHOAS runState putStrLn = UnHOAS putStrLn