source 
 prog 
 defn 
 FUN 
 1:1-1:3 
 fun 
 ID 
 1:5-1:9 
 funny 
 LBRACKET 
 1:10-1:10 
 ( 
 ID 
 1:11-1:11 
 a 
 COLON 
 1:13-1:13 
 : 
 type 
 INT 
 1:15-1:17 
 int 
 COMMA 
 1:18-1:18 
 , 
 ID 
 1:20-1:20 
 b 
 COLON 
 1:22-1:22 
 : 
 type 
 INT 
 1:24-1:26 
 int 
 RBRACKET 
 1:27-1:27 
 ) 
 COLON 
 1:29-1:29 
 : 
 type 
 VOID 
 1:31-1:34 
 void 
 EQUALS 
 1:36-1:36 
 = 
 expr 
 expr 
 HAT 
 1:38-1:38 
 ^ 
 expr 
 expr 
 expr 
 expr 
 ID 
 1:39-1:39 
 a 
 LSQUARE 
 1:40-1:40 
 [ 
 expr 
 ID 
 1:41-1:41 
 b 
 RSQUARE 
 1:42-1:42 
 ] 
 DOT 
 1:43-1:43 
 . 
 ID 
 1:44-1:44 
 c 
 HAT 
 1:45-1:45 
 ^ 
 AS 
 1:47-1:48 
 as 
 type 
 LCURLY 
 1:50-1:50 
 { 
 ID 
 1:52-1:52 
 a 
 COLON 
 1:53-1:53 
 : 
 type 
 LCURLY 
 1:55-1:55 
 { 
 ID 
 1:56-1:56 
 a 
 COLON 
 1:57-1:57 
 : 
 type 
 INT 
 1:59-1:61 
 int 
 RCURLY 
 1:62-1:62 
 } 
 COMMA 
 1:63-1:63 
 , 
 ID 
 1:65-1:65 
 b 
 COLON 
 1:66-1:66 
 : 
 type 
 LBRACKET 
 1:68-1:68 
 ( 
 COLON 
 1:69-1:69 
 : 
 type 
 LCURLY 
 1:70-1:70 
 { 
 ID 
 1:71-1:71 
 a 
 COLON 
 1:72-1:72 
 : 
 type 
 LBRACKET 
 1:74-1:74 
 ( 
 ID 
 1:76-1:76 
 g 
 COLON 
 1:78-1:78 
 : 
 type 
 INT 
 1:80-1:82 
 int 
 RBRACKET 
 1:83-1:83 
 ) 
 RCURLY 
 1:84-1:84 
 } 
 COLON 
 1:85-1:85 
 : 
 type 
 BOOL 
 1:86-1:89 
 bool 
 RBRACKET 
 1:90-1:90 
 ) 
 RCURLY 
 1:91-1:91 
 } 
 COMMA 
 1:92-1:92 
 , 
 expr 
 SIZEOF 
 1:94-1:99 
 sizeof 
 type 
 LCURLY 
 1:101-1:101 
 { 
 ID 
 1:103-1:103 
 a 
 COLON 
 1:104-1:104 
 : 
 type 
 LCURLY 
 1:106-1:106 
 { 
 ID 
 1:107-1:107 
 a 
 COLON 
 1:108-1:108 
 : 
 type 
 INT 
 1:110-1:112 
 int 
 RCURLY 
 1:113-1:113 
 } 
 COMMA 
 1:114-1:114 
 , 
 ID 
 1:116-1:116 
 b 
 COLON 
 1:117-1:117 
 : 
 type 
 LBRACKET 
 1:119-1:119 
 ( 
 COLON 
 1:120-1:120 
 : 
 type 
 LCURLY 
 1:121-1:121 
 { 
 ID 
 1:122-1:122 
 a 
 COLON 
 1:123-1:123 
 : 
 type 
 LBRACKET 
 1:125-1:125 
 ( 
 ID 
 1:127-1:127 
 g 
 COLON 
 1:129-1:129 
 : 
 type 
 INT 
 1:131-1:133 
 int 
 RBRACKET 
 1:134-1:134 
 ) 
 RCURLY 
 1:135-1:135 
 } 
 COLON 
 1:136-1:136 
 : 
 type 
 BOOL 
 1:137-1:140 
 bool 
 RBRACKET 
 1:141-1:141 
 ) 
 RCURLY 
 1:142-1:142 
 } 
 defn 
 TYP 
 4:1-4:3 
 typ 
 ID 
 4:5-4:5 
 t 
 EQUALS 
 4:7-4:7 
 = 
 type 
 LBRACKET 
 4:9-4:9 
 ( 
 COLON 
 4:10-4:10 
 : 
 COLON 
 4:11-4:11 
 : 
 type 
 ID 
 4:12-4:12 
 t 
 RBRACKET 
 4:13-4:13 
 ) 
 EOF