AFunDep :: (RTupled fs, RTE fs ~ a, RTR fs ~ FunDepSpec)
=> fs -> Ann (CTE r t a)
+ -- XXX Declare an additional index
+ -- AIndex :: (RTupled fs, RTE fs ~ a, RTR fs ~ FunDepSpec)
+ -- => fs -> Ann (CTE r t a)
+
-- | An "Exactly-One-Of" annotation, used to convey variants (i.e. sums)
-- to K3.
AOneOf :: (RTupled mv, RTR mv ~ Maybe) => Ann mv
biadd = (+)
bimul = (*)
+instance BiNum Int Float where
+ type BNTF Int Float = Float
+ biadd a b = ((fromIntegral a) + b)
+ bimul a b = ((fromIntegral a) * b)
+
instance BiNum Float Float where
type BNTF Float Float = Float
biadd = (+)
bimul = (*)
+instance BiNum Float Int where
+ type BNTF Float Int = Float
+ biadd a b = (a + (fromIntegral b))
+ bimul a b = (a * (fromIntegral b))
+
+
-- XXX More
------------------------------------------------------------------------}}}
tColl CTBag (AsK3Ty ta) = AsK3Ty$ encBag ta
tColl CTList (AsK3Ty ta) = AsK3Ty$ brackets ta
- tFun (AsK3Ty ta) (AsK3Ty tb) = AsK3Ty$ ta <+> "->" <+> tb
+ tFun (AsK3Ty ta) (AsK3Ty tb) = AsK3Ty$ ta `above` ("->" <+> tb)
tRef (AsK3Ty ta) = AsK3Ty$ "ref" <+> ta
shd (Decl (Var name) tipe body) =
"declare "
<> text name
- <> space <> colon <> space
- <> unAsK3Ty tipe
+ <+> align (colon <+> unAsK3Ty tipe)
<> case body of
Nothing -> empty
Just b -> space <> equals `aboveBreak` (indent 2 $ unAsK3 b 0)
--
-- * Doesn't handle shared subgoals ("whenever ... { ... }")
--- Header material {{{
+{- Header material -} -- {{{
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE NoMonomorphismRestriction #-}