@@ -69,7 +69,7 @@ import Util
69
69
parseExpr :: Fallible m => GroupW -> m (UExpr VoidS )
70
70
parseExpr e = liftSyntaxM $ expr e
71
71
72
- parseDecl :: Fallible m => CTopDeclW -> m ( UTopDecl VoidS VoidS )
72
+ parseDecl :: Fallible m => CTopDeclW -> m UTopDecl
73
73
parseDecl d = liftSyntaxM $ topDecl d
74
74
75
75
parseBlock :: Fallible m => CSBlock -> m (UBlock VoidS )
@@ -93,46 +93,44 @@ checkSourceBlockParses = \case
93
93
when (ann /= PlainLet ) $ fail " Cannot annotate expressions"
94
94
void $ expr e
95
95
TopDecl d -> void $ topDecl d
96
- Command _ b -> void $ expr b
97
- DeclareForeign _ _ ty -> void $ expr ty
98
- DeclareCustomLinearization _ _ body -> void $ expr body
99
96
Misc _ -> return ()
100
97
UnParseable _ _ -> return ()
101
98
102
99
-- === Converting concrete syntax to abstract syntax ===
103
100
104
101
type SyntaxM = Except
105
102
106
- topDecl :: CTopDeclW -> SyntaxM (UTopDecl VoidS VoidS )
107
- topDecl (WithSrcs sid sids topDecl') = case topDecl' of
108
- CSDecl ann d -> ULocalDecl <$> decl ann (WithSrcs sid sids d)
109
- CData name tyConParams givens constructors -> do
110
- tyConParams' <- fromMaybeM tyConParams Empty aExplicitParams
111
- givens' <- aOptGivens givens
112
- constructors' <- forM constructors \ (v, ps) -> do
113
- ps' <- fromMaybeM ps Empty \ (WithSrcs _ _ ps') ->
114
- toNest <$> mapM (tyOptBinder Explicit ) ps'
115
- return (v, ps')
116
- return $ UDataDefDecl
117
- (UDataDef (withoutSrc name) (givens' >>> tyConParams') $
118
- map (\ (name', cons) -> (withoutSrc name', UDataDefTrail cons)) constructors')
119
- (fromSourceNameW name)
120
- (toNest $ map (fromSourceNameW . fst ) constructors')
121
- CStruct name params givens fields defs -> do
122
- params' <- fromMaybeM params Empty aExplicitParams
123
- givens' <- aOptGivens givens
124
- fields' <- forM fields \ (v, ty) -> (v,) <$> expr ty
125
- methods <- forM defs \ (ann, d) -> do
126
- (WithSrc _ methodName, lam) <- aDef d
127
- return (ann, methodName, Abs (WithSrcB sid (UBindSource " self" )) lam)
128
- return $ UStructDecl (fromSourceNameW name) (UStructDef (withoutSrc name) (givens' >>> params') fields' methods)
129
- CInterface name params methods -> do
130
- params' <- aExplicitParams params
131
- (methodNames, methodTys) <- unzip <$> forM methods \ (methodName, ty) -> do
132
- ty' <- expr ty
133
- return (fromSourceNameW methodName, ty')
134
- return $ UInterface params' methodTys (fromSourceNameW name) (toNest methodNames)
135
- CInstanceDecl def -> aInstanceDef def
103
+ topDecl :: CTopDeclW -> SyntaxM UTopDecl
104
+ topDecl (WithSrcs sid sids topDecl') = undefined
105
+ -- topDecl (WithSrcs sid sids topDecl') = case topDecl' of
106
+ -- CSDecl ann d -> UTopLet <$> decl ann (WithSrcs sid sids d)
107
+ -- CData name tyConParams givens constructors -> do
108
+ -- tyConParams' <- fromMaybeM tyConParams Empty aExplicitParams
109
+ -- givens' <- aOptGivens givens
110
+ -- constructors' <- forM constructors \(v, ps) -> do
111
+ -- ps' <- fromMaybeM ps Empty \(WithSrcs _ _ ps') ->
112
+ -- toNest <$> mapM (tyOptBinder Explicit) ps'
113
+ -- return (v, ps')
114
+ -- return $ UDataDefDecl
115
+ -- (UDataDef (withoutSrc name) (givens' >>> tyConParams') $
116
+ -- map (\(name', cons) -> (withoutSrc name', UDataDefTrail cons)) constructors')
117
+ -- (fromSourceNameW name)
118
+ -- (toNest $ map (fromSourceNameW . fst) constructors')
119
+ -- CStruct name params givens fields defs -> do
120
+ -- params' <- fromMaybeM params Empty aExplicitParams
121
+ -- givens' <- aOptGivens givens
122
+ -- fields' <- forM fields \(v, ty) -> (v,) <$> expr ty
123
+ -- methods <- forM defs \(ann, d) -> do
124
+ -- (WithSrc _ methodName, lam) <- aDef d
125
+ -- return (ann, methodName, Abs (WithSrcB sid (UBindSource "self")) lam)
126
+ -- return $ UStructDecl (fromSourceNameW name) (UStructDef (withoutSrc name) (givens' >>> params') fields' methods)
127
+ -- CInterface name params methods -> do
128
+ -- params' <- aExplicitParams params
129
+ -- (methodNames, methodTys) <- unzip <$> forM methods \(methodName, ty) -> do
130
+ -- ty' <- expr ty
131
+ -- return (fromSourceNameW methodName, ty')
132
+ -- return $ UInterface params' methodTys (fromSourceNameW name) (toNest methodNames)
133
+ -- CInstanceDecl def -> aInstanceDef def
136
134
137
135
decl :: LetAnn -> CSDeclW -> SyntaxM (UDecl VoidS VoidS )
138
136
decl ann (WithSrcs sid _ d) = WithSrcB sid <$> case d of
@@ -145,21 +143,22 @@ decl ann (WithSrcs sid _ d) = WithSrcB sid <$> case d of
145
143
CExpr g -> UExprDecl <$> expr g
146
144
CPass -> return UPass
147
145
148
- aInstanceDef :: CInstanceDef -> SyntaxM (UTopDecl VoidS VoidS )
149
- aInstanceDef (CInstanceDef (WithSrc clNameId clName) args givens methods instNameAndParams) = do
150
- let clName' = SourceName clNameId clName
151
- args' <- mapM expr args
152
- givens' <- aOptGivens givens
153
- methods' <- catMaybes <$> mapM aMethod methods
154
- case instNameAndParams of
155
- Nothing -> return $ UInstance clName' givens' args' methods' NothingB ImplicitApp
156
- Just (WithSrc sid instName, optParams) -> do
157
- let instName' = JustB $ WithSrcB sid $ UBindSource instName
158
- case optParams of
159
- Just params -> do
160
- params' <- aExplicitParams params
161
- return $ UInstance clName' (givens' >>> params') args' methods' instName' ExplicitApp
162
- Nothing -> return $ UInstance clName' givens' args' methods' instName' ImplicitApp
146
+ aInstanceDef :: CInstanceDef -> SyntaxM UTopDecl
147
+ aInstanceDef = undefined
148
+ -- aInstanceDef (CInstanceDef (WithSrc clNameId clName) args givens methods instNameAndParams) = do
149
+ -- let clName' = SourceName clNameId clName
150
+ -- args' <- mapM expr args
151
+ -- givens' <- aOptGivens givens
152
+ -- methods' <- catMaybes <$> mapM aMethod methods
153
+ -- case instNameAndParams of
154
+ -- Nothing -> return $ UInstance clName' givens' args' methods' NothingB ImplicitApp
155
+ -- Just (WithSrc sid instName, optParams) -> do
156
+ -- let instName' = JustB $ WithSrcB sid $ UBindSource instName
157
+ -- case optParams of
158
+ -- Just params -> do
159
+ -- params' <- aExplicitParams params
160
+ -- return $ UInstance clName' (givens' >>> params') args' methods' instName' ExplicitApp
161
+ -- Nothing -> return $ UInstance clName' givens' args' methods' instName' ImplicitApp
163
162
164
163
aDef :: CDef -> SyntaxM (SourceNameW , ULamExpr VoidS )
165
164
aDef (CDef name params optRhs optGivens body) = do
0 commit comments