@@ -47,6 +47,9 @@ shapes = [ twoNums (\n m -> listOf (pairOf n) ==> pairOf m ==> shape) "polygon"
4747 , "filled" -: color ==> shape ==> form
4848 , "outlined" -: color ==> shape ==> form
4949 , "customOutline" -: listOf int ==> color ==> shape ==> form
50+ , scheme2 number transformable (\n t -> n ==> n ==> t ==> t) "move"
51+ , scheme2 number transformable (\n t -> n ==> t ==> t) "rotate"
52+ , scheme2 number transformable (\n t -> n ==> t ==> t) "scale"
5053 ] ++ map (twoNums (\n m -> n ==> n ==> pairOf m ==> shape)) [ "ngon"
5154 , "rect"
5255 , "oval" ]
@@ -141,11 +144,11 @@ concreteSignals =
141144
142145binop t = t ==> t ==> t
143146scheme1 super t name = (name, Forall [0] [VarT 0 :<: super] (t (VarT 0)))
147+scheme2 s1 s2 t name =
148+ (name, Forall [0,1] [VarT 0 :<: s1, VarT 1 :<: s2] (t (VarT 0) (VarT 1)))
144149numScheme t name = scheme1 number t name
145150timeScheme name t = scheme1 time t name
146−twoNums f name =
147− (,) name . Forall [0,1] [ VarT 0 :<: number, VarT 1 :<: number ] $
148− f (VarT 0) (VarT 1)
151+twoNums f name = scheme2 number number f name
149152
150153math =
151154 map (numScheme (\t -> t ==> binop t)) ["clamp"] ++