shithub: MicroHs

Download patch

ref: 3181efc342bee2b68ca4d2a01da1e1ded8bc2bd4
parent: c80754ecc3ce9155327e5cf739c23580042bf601
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Wed Sep 20 06:51:50 EDT 2023

Handle (->)

--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
 v3.4
-849
-(($A :0 ((_643 _592) (($B ((($S' ($C ((($C' ($S' _643)) (($B ($C _2)) _575)) (($B ($B (_643 _672))) ((($C' ($C' $C)) ((($C' ($S' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $S)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' $C))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' ($C' $S'))))) ((($C' ($C' ($C' ($C' ($C' $C'))))) ((($C' ($C' ($C' ($S' ($C' $C'))))) (($B ($B ($B ($B $B')))) ((($S' $B) ($B' ($B' (($B ($S' $B)) (($B ($B _644)) ((($C' $B) (($B _741) (($B _662) ((($C' _778) _9) 0)))) (($B (_741 _665)) (($B (_678 "top level defns: ")) _623)))))))) ((($S' $B) ($B' (($B ($C' $B)) (($B $B') (($B ($B _644)) ((($C' $B) (($B _741) (($B _662) ((($C' _778) _9) 1)))) (_661 ($T (($B ($B (_741 _665))) ((($C' $B) (($B _678) ((($C' _678) _581) " = "))) (($C _400) $K))))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _10))) ((($S' $B) (($B ($C' ($C' _644))) ((($C' $B) ($B' (($B _741) (($B _667) _12)))) (($B _678) ((($C' _678) (($B (_678 _1)) _623)) (($O 10) $K)))))) (($B ($B (_643 _672))) ((($C' $B) ($B' (($B _741) (($B _662) ((($C' _778) _9) 0))))) (($B ($B (_741 _665))) ((($C' ($C' _678)) (($B ($B (_678 "final pass            "))) (($B ($B (_637 6))) (($B ($B _623)) _772)))) "ms"))))))) _3))))) ((($C' ($C' $C)) (($B (($C' $C) (($B ($C _683)) _400))) (($C _696) (_712 0)))) $K))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B $BK)) (($B ($B (($C' $B) (($B _742) (($B _678) ((($C' _678) (($B (_678 "(($A :")) _623)) (($O 32) $K))))))) ((($C' $B) (($B ($C' _742)) ($B _400))) (($B (_742 (_678 ") "))) (($C _742) (_678 (($O 41) $K)))))))))))) $T)) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _375)) $I))) ($BK $K))) $K))))) (($B (($S' _741) (($B _738) (($B (_741 _787)) (($B (_678 "main: findIdent: ")) _581))))) (($C' _611) _578)))) _618))) (($B ($B _615)) ((($C' $B) (($B _680) (($B $T) (($B ($C $B)) (($B ($B $BK)) ((($C' ($C' ($C' $O))) ($B (($C' $P) _578))) $K)))))) (($C _696) (_712 0))))))) ($T $A))) ($T $K))) $I)) (($B (_741 _374)) (($B (_741 _575)) (($B (_678 (($O 95) $K))) _623)))))))) (($S (($S ((($S' _8) (($B _695) (_682 (_635 "-v")))) ((_711 _635) "-r"))) (($B (_676 (($O 46) $K))) (($B _740) (_681 ((_700 _763) "-i")))))) (($B (_741 _707)) ((($C' _678) (($B _740) (_681 ((_700 _763) "-o")))) (($O "out.comb") $K))))) (($B (($S (($C ((($C' _774) _695) 1)) (_787 "Usage: mhs [-v] [-r] [-iPATH] [-oFILE] ModuleName"))) _707)) (_682 ((_742 _783) ((_742 (_635 (($O 45) $K))) (_693 1))))))) (_703 ((_742 _783) (_635 "--")))))) (($A :1 "v3.4\10&") (($A :2 ((($S' ($S' _643)) _17) (($B ($B ($B (_643 _672)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _643) (($B _645) (_734 _220)))))) (($B ($B ($B ($B $T)))) (($B ($B ($B ($B (_643 _672))))) ((($C' $B) (($B ($C' $B)) (($B ($B ($C' _644))) ((($C' $B) ($B' (($B _741) (($B _662) ((($C' _778) _9) 0))))) (($B ($B (_741 _665))) ((($C' ($C' _678)) (($B ($B (_678 "combinator conversion "))) (($B ($B (_637 6))) (($B ($B _623)) _772)))) "ms")))))) (($B ($B _645)) (($B $P) (($C _584) (_575 "main"))))))))) (_680 ($T ((($C' ($C' $O)) ((($C' $B) $P) _403)) $K))))))) (($A :3 (($B (_643 _592)) (($B (($C' _593) ((($C' _767) (($B _695) (_703 ((_742 _783) (_635 "--"))))) 1))) (($B (_741 _7)) _4)))) (($A :4 ($T (($C ((($C' $C') (($B $S) ($C $C))) (($B ($B $Y)) (($B ($B ($B _565))) (($C' ($C' _680)) (($B ($B $T)) ((($C' ($C' ($C' ($C' $O)))) (($B ($B (($C' $B) $P))) ($B _5))) $K))))))) (($B (($S' _741) (($B _738) (($B (_741 _787)) (($B (_678 "not found ")) _581))))) ($C _566))))) (($A :5 ((($C' $C) ((($S' $C) ((($C' ($C' $S')) (($S $P) ((($S' ($C' $B)) (($B ($B _7)) _5)) _5))) ($BK $K))) ((($C' ($S' $C)) ((($C' ($C' $C)) (($B (($C' $C) (($B ($P _7)) $K))) ((($C' $B) _5) _402))) ((($S' _741) (($B _738) (($B (_741 _787)) (_678 "primlookup: ")))) (($C (_717 _635)) _6)))) $K))) (_787 "trans: impossible"))) (($A :6 (($O (($P (($O 66) $K)) $B)) (($O (($P (($O 79) $K)) $O)) (($O (($P (($O 75) $K)) $K)) (($O (($P "C'") $C')) (($O (($P (($O 67)
\ No newline at end of file
+851
+(($A :0 ((_645 _594) (($B ((($S' ($C ((($C' ($S' _645)) (($B ($C _2)) _577)) (($B ($B (_645 _674))) ((($C' ($C' $C)) ((($C' ($S' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $S)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' $C))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' ($C' $S'))))) ((($C' ($C' ($C' ($C' ($C' $C'))))) ((($C' ($C' ($C' ($S' ($C' $C'))))) (($B ($B ($B ($B $B')))) ((($S' $B) ($B' ($B' (($B ($S' $B)) (($B ($B _646)) ((($C' $B) (($B _743) (($B _664) ((($C' _780) _9) 0)))) (($B (_743 _667)) (($B (_680 "top level defns: ")) _625)))))))) ((($S' $B) ($B' (($B ($C' $B)) (($B $B') (($B ($B _646)) ((($C' $B) (($B _743) (($B _664) ((($C' _780) _9) 1)))) (_663 ($T (($B ($B (_743 _667))) ((($C' $B) (($B _680) ((($C' _680) _583) " = "))) (($C _402) $K))))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _10))) ((($S' $B) (($B ($C' ($C' _646))) ((($C' $B) ($B' (($B _743) (($B _669) _12)))) (($B _680) ((($C' _680) (($B (_680 _1)) _625)) (($O 10) $K)))))) (($B ($B (_645 _674))) ((($C' $B) ($B' (($B _743) (($B _664) ((($C' _780) _9) 0))))) (($B ($B (_743 _667))) ((($C' ($C' _680)) (($B ($B (_680 "final pass            "))) (($B ($B (_639 6))) (($B ($B _625)) _774)))) "ms"))))))) _3))))) ((($C' ($C' $C)) (($B (($C' $C) (($B ($C _685)) _402))) (($C _698) (_714 0)))) $K))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B $BK)) (($B ($B (($C' $B) (($B _744) (($B _680) ((($C' _680) (($B (_680 "(($A :")) _625)) (($O 32) $K))))))) ((($C' $B) (($B ($C' _744)) ($B _402))) (($B (_744 (_680 ") "))) (($C _744) (_680 (($O 41) $K)))))))))))) $T)) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _377)) $I))) ($BK $K))) $K))))) (($B (($S' _743) (($B _740) (($B (_743 _789)) (($B (_680 "main: findIdent: ")) _583))))) (($C' _613) _580)))) _620))) (($B ($B _617)) ((($C' $B) (($B _682) (($B $T) (($B ($C $B)) (($B ($B $BK)) ((($C' ($C' ($C' $O))) ($B (($C' $P) _580))) $K)))))) (($C _698) (_714 0))))))) ($T $A))) ($T $K))) $I)) (($B (_743 _376)) (($B (_743 _577)) (($B (_680 (($O 95) $K))) _625)))))))) (($S (($S ((($S' _8) (($B _697) (_684 (_637 "-v")))) ((_713 _637) "-r"))) (($B (_678 (($O 46) $K))) (($B _742) (_683 ((_702 _765) "-i")))))) (($B (_743 _709)) ((($C' _680) (($B _742) (_683 ((_702 _765) "-o")))) (($O "out.comb") $K))))) (($B (($S (($C ((($C' _776) _697) 1)) (_789 "Usage: mhs [-v] [-r] [-iPATH] [-oFILE] ModuleName"))) _709)) (_684 ((_744 _785) ((_744 (_637 (($O 45) $K))) (_695 1))))))) (_705 ((_744 _785) (_637 "--")))))) (($A :1 "v3.4\10&") (($A :2 ((($S' ($S' _645)) _17) (($B ($B ($B (_645 _674)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _645) (($B _647) (_736 _222)))))) (($B ($B ($B ($B $T)))) (($B ($B ($B ($B (_645 _674))))) ((($C' $B) (($B ($C' $B)) (($B ($B ($C' _646))) ((($C' $B) ($B' (($B _743) (($B _664) ((($C' _780) _9) 0))))) (($B ($B (_743 _667))) ((($C' ($C' _680)) (($B ($B (_680 "combinator conversion "))) (($B ($B (_639 6))) (($B ($B _625)) _774)))) "ms")))))) (($B ($B _647)) (($B $P) (($C _586) (_577 "main"))))))))) (_682 ($T ((($C' ($C' $O)) ((($C' $B) $P) _405)) $K))))))) (($A :3 (($B (_645 _594)) (($B (($C' _595) ((($C' _769) (($B _697) (_705 ((_744 _785) (_637 "--"))))) 1))) (($B (_743 _7)) _4)))) (($A :4 ($T (($C ((($C' $C') (($B $S) ($C $C))) (($B ($B $Y)) (($B ($B ($B _567))) (($C' ($C' _682)) (($B ($B $T)) ((($C' ($C' ($C' ($C' $O)))) (($B ($B (($C' $B) $P))) ($B _5))) $K))))))) (($B (($S' _743) (($B _740) (($B (_743 _789)) (($B (_680 "not found ")) _583))))) ($C _568))))) (($A :5 ((($C' $C) ((($S' $C) ((($C' ($C' $S')) (($S $P) ((($S' ($C' $B)) (($B ($B _7)) _5)) _5))) ($BK $K))) ((($C' ($S' $C)) ((($C' ($C' $C)) (($B (($C' $C) (($B ($P _7)) $K))) ((($C' $B) _5) _404))) ((($S' _743) (($B _740) (($B (_743 _789)) (_680 "primlookup: ")))) (($C (_719 _637)) _6)))) $K))) (_789 "trans: impossible"))) (($A :6 (($O (($P (($O 66) $K)) $B)) (($O (($P (($O 79) $K)) $O)) (($O (($P (($O 75) $K)) $K)) (($O (($P "C'") $C')) (($O (($P (($O 67)
\ No newline at end of file
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -162,6 +162,19 @@
   guard (not (isUOper s))
   P.pure s
 
+-- Allow -> as well
+pLQSymOperArr :: P Ident
+pLQSymOperArr = pLQSymOper <|< pQArrow
+
+-- Parse ->, possibly qualified
+pQArrow :: P Ident
+pQArrow = P.do
+  fn <- getFileName
+  let
+    is (TIdent loc qs s@"->") = Just (qualName fn loc qs s)
+    is _ = Nothing
+  satisfyM "->" is
+
 pLSymOper :: P Ident
 pLSymOper = P.do
   s <- pSymOper
@@ -175,7 +188,7 @@
 pUQIdentSym = pUQIdent <|< pParens pUQSymOper
 
 pLQIdentSym :: P Ident
-pLQIdentSym = pLQIdent <|< pParens pLQSymOper 
+pLQIdentSym = pLQIdent <|< pParens pLQSymOperArr
 
 pLIdentSym :: P Ident
 pLIdentSym = pLIdent <|< pParens pLSymOper
--