summaryrefslogtreecommitdiff
path: root/src/Obs/Abstract.idr
diff options
context:
space:
mode:
authorGreg Brown <greg.brown01@ed.ac.uk>2023-01-07 21:10:30 +0000
committerGreg Brown <greg.brown01@ed.ac.uk>2023-01-07 21:58:30 +0000
commitff65d1e285a97295708899bebdcc83ec214cd347 (patch)
tree7a786ef895ff2dea0ba31b3c7cd7397024214a10 /src/Obs/Abstract.idr
parentf38761fd38207a6d9a6cc2134384cb7115a5e998 (diff)
Add containers types.
Containers are syntactic sugar. They are also completely untested.
Diffstat (limited to 'src/Obs/Abstract.idr')
-rw-r--r--src/Obs/Abstract.idr22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/Obs/Abstract.idr b/src/Obs/Abstract.idr
index 4ef3f43..25c4210 100644
--- a/src/Obs/Abstract.idr
+++ b/src/Obs/Abstract.idr
@@ -67,6 +67,28 @@ abstractSyntax ctx (First {arg}) = do
abstractSyntax ctx (Second {arg}) = do
arg <- abstractSyntaxBounds ctx arg
pure (Second {arg})
+abstractSyntax ctx (Container {input, output, shapeSort, positionSort}) = do
+ input <- abstractSyntaxBounds ctx input
+ output <- abstractSyntaxBounds ctx output
+ pure (Container {input, output, shapeSort, positionSort})
+abstractSyntax ctx (MkContainer {shape, position, next}) = do
+ shape <- abstractSyntaxBounds ctx shape
+ position <- abstractSyntaxBounds ctx position
+ next <- abstractSyntaxBounds ctx next
+ pure (MkContainer {shape, position, next})
+abstractSyntax ctx (Shape {arg}) = do
+ arg <- abstractSyntaxBounds ctx arg
+ pure (Shape {arg})
+abstractSyntax ctx (Position {arg}) = do
+ arg <- abstractSyntaxBounds ctx arg
+ pure (Position {arg})
+abstractSyntax ctx (Next {arg}) = do
+ arg <- abstractSyntaxBounds ctx arg
+ pure (Next {arg})
+abstractSyntax ctx (Sem {pred, arg}) = do
+ pred <- abstractLambda ctx pred
+ arg <- abstractSyntaxBounds ctx arg
+ pure (Sem {pred, arg})
abstractSyntax ctx Bool = pure Bool
abstractSyntax ctx True = pure True
abstractSyntax ctx False = pure False