-parseVarDef = liftM2 VarDef
- parseIdent
- (many (satTok DotToken *> (
- (parseIdent >>= (\i.if (i == "hd") (pure FieldHd) empty)) <|>
- (parseIdent >>= \i.if (i == "tl") (pure FieldTl) empty) <|>
- (parseIdent >>= \i.if (i == "fst") (pure FieldFst) empty) <|>
- (parseIdent >>= \i.if (i == "snd") (pure FieldSnd) empty))))
+parseVarDef = liftM2 VarDef parseIdent parseFieldSelectors
+
+parseFieldSelectors :: Parser Token [FieldSelector]
+parseFieldSelectors = many (satTok DotToken *>
+ parseIdent >>= \i->case i of
+ "hd" = pure FieldHd
+ "tl" = pure FieldTl
+ "fst" = pure FieldFst
+ "snd" = pure FieldSnd
+ _ = empty)