source 
 prog 
 defn 
 TYP 
 1:1-1:3 
 typ 
 ID 
 1:5-1:5 
 a 
 EQUALS 
 1:7-1:7 
 = 
 type 
 LBRACKET 
 1:9-1:9 
 ( 
 COLON 
 1:10-1:10 
 : 
 COLON 
 1:11-1:11 
 : 
 type 
 INT 
 1:12-1:14 
 int 
 RBRACKET 
 1:15-1:15 
 ) 
 defn 
 FUN 
 2:1-2:3 
 fun 
 ID 
 2:5-2:5 
 f 
 LBRACKET 
 2:6-2:6 
 ( 
 RBRACKET 
 2:7-2:7 
 ) 
 COLON 
 2:9-2:9 
 : 
 type 
 LCURLY 
 2:11-2:11 
 { 
 RCURLY 
 2:12-2:12 
 } 
 EQUALS 
 2:14-2:14 
 = 
 expr 
 HAT 
 3:5-3:5 
 ^ 
 expr 
 expr 
 ID 
 3:6-3:6 
 a 
 HAT 
 3:7-3:7 
 ^ 
 EOF