diff --git a/source/library/Language/Haskell/Brittany/Internal/Components/OpTree.hs b/source/library/Language/Haskell/Brittany/Internal/Components/OpTree.hs index c008191..c3f18ad 100644 --- a/source/library/Language/Haskell/Brittany/Internal/Components/OpTree.hs +++ b/source/library/Language/Haskell/Brittany/Internal/Components/OpTree.hs @@ -99,10 +99,11 @@ balanceOpTree allowUnqualify = \case (warns, OpKnown paren locO locC fixity c cs) Right t -> (warns, t) Left moreWarns -> - ( warns - ++ [ LayoutWarning ("Fixity of operator not known: " ++ w) - | w <- moreWarns - ] + ( ( warns + ++ [ LayoutWarning ("Fixity of operator not known: " ++ w) + | w <- moreWarns + ] + ) , x ) where @@ -255,9 +256,17 @@ hardcodedFixity allowUnqualify = \case "!<<." -> Just $ Fixity NoSourceText 8 InfixL ">=>" -> Just $ Fixity NoSourceText 1 InfixR "<=<" -> Just $ Fixity NoSourceText 1 InfixR + "&&&" -> Just $ Fixity NoSourceText 3 InfixR + "<$!>" -> fixity InfixL 4 + "~" -> fixity InfixN 4 + "~~" -> fixity InfixN 4 ":~:" -> Just $ Fixity NoSourceText 4 InfixN ":~~:" -> Just $ Fixity NoSourceText 4 InfixN + ":+:" -> fixity InfixR 5 + ":*:" -> fixity InfixR 6 + ":.:" -> fixity InfixR 7 + ":|" -> fixity InfixR 5 -- non-base from random sources. "<|" -> Just $ Fixity NoSourceText 5 InfixR @@ -269,7 +278,126 @@ hardcodedFixity allowUnqualify = \case ":?" -> Just $ Fixity NoSourceText 7 InfixN ":-" -> Just $ Fixity NoSourceText 9 InfixR ".:" -> Just $ Fixity NoSourceText 9 InfixR - ".=" -> Just $ Fixity NoSourceText 8 InfixR + "$!!" -> fixity InfixR 0 + "<$!!>" -> fixity InfixL 4 + + -- lens, not complete! + "<|" -> fixity InfixR 5 + "|>" -> fixity InfixL 5 + "%~" -> fixity InfixR 4 + ".~" -> fixity InfixR 4 + "?~" -> fixity InfixR 4 + "<.~" -> fixity InfixR 4 + " fixity InfixR 4 + "+~" -> fixity InfixR 4 + "*~" -> fixity InfixR 4 + "-~" -> fixity InfixR 4 + "//~" -> fixity InfixR 4 + "^~" -> fixity InfixR 4 + "^^~" -> fixity InfixR 4 + "**~" -> fixity InfixR 4 + "||~" -> fixity InfixR 4 + "&&~" -> fixity InfixR 4 + ".=" -> fixity InfixN 4 + "%=" -> fixity InfixN 4 + "?=" -> fixity InfixN 4 + "+=" -> fixity InfixN 4 + "-=" -> fixity InfixN 4 + "*=" -> fixity InfixN 4 + "//=" -> fixity InfixN 4 + "^=" -> fixity InfixN 4 + "^^=" -> fixity InfixN 4 + "**=" -> fixity InfixN 4 + "&&=" -> fixity InfixN 4 + "||=" -> fixity InfixN 4 + "<~" -> fixity InfixR 2 + "<.=" -> fixity InfixN 4 + " fixity InfixN 4 + "<>~" -> fixity InfixR 4 + "<>=" -> fixity InfixN 4 + "^.." -> fixity InfixL 8 + "^?" -> fixity InfixL 8 + "^?!" -> fixity InfixL 8 + "^@.." -> fixity InfixL 8 + "^@?" -> fixity InfixL 8 + "^@?!" -> fixity InfixL 8 + "^." -> fixity InfixL 8 + "^@." -> fixity InfixL 8 + "<." -> fixity InfixR 9 + ".>" -> fixity InfixR 9 + "<.>" -> fixity InfixR 9 + "@@~" -> fixity InfixR 4 + "@@=" -> fixity InfixR 4 + "&~" -> fixity InfixL 1 + "??" -> fixity InfixL 1 + + + -- certain other operators + -- "%." -> Just $ Fixity NoSourceText _ _ + -- "%==" -> Just $ Fixity NoSourceText _ _ + -- "%=>%" -> Just $ Fixity NoSourceText _ _ + -- "&*" -> Just $ Fixity NoSourceText _ _ + -- "&/" -> Just $ Fixity NoSourceText _ _ + -- "&=" -> Just $ Fixity NoSourceText _ _ + -- "-->" -> Just $ Fixity NoSourceText _ _ + -- ".*?" -> fixity _ _ + -- ".+." -> fixity _ _ + -- ".-." -> fixity _ _ + ".&." -> fixity InfixR 1 + ".&&." -> fixity InfixR 1 + ".||." -> fixity InfixR 1 + "==>" -> fixity InfixR 0 + "=/=" -> fixity InfixN 4 + "===" -> fixity InfixN 4 + ".:!" -> fixity InfixL 9 + ".:?" -> fixity InfixL 9 + -- ".:>" -> fixity _ _ + -- ".:>?" -> fixity _ _ + "<.>" -> fixity InfixR 7 + "" -> fixity InfixR 5 + "" -> fixity InfixL 9 + -- "~" -> fixity _ _ + "===" -> fixity InfixN 4 + "!?" -> fixity InfixL 9 + "%==" -> fixity InfixN 3 + ".*" -> fixity InfixR 8 + ".**" -> fixity InfixR 8 + ".***" -> fixity InfixR 8 + ":?-" -> fixity InfixN 1 + "::-" -> fixity InfixN 0 + "&!" -> fixity InfixL 1 + + -- quickcheck (-state-machine) + ":&&" -> fixity InfixL 9 + ":||" -> fixity InfixL 9 + ":&&:" -> fixity InfixL 9 + ":=>" -> fixity InfixL 9 + ":==" -> fixity InfixL 9 + ":/=" -> fixity InfixL 9 + ":<" -> fixity InfixL 9 + ":<=" -> fixity InfixL 9 + ":>" -> fixity InfixL 9 + ":>=" -> fixity InfixL 9 + ":->" -> fixity InfixL 9 + + -- servant + ":>" -> fixity InfixR 4 + ":<|>" -> fixity InfixR 3 + ":-" -> fixity InfixL 0 + + -- postgresql-simple + ":." -> fixity InfixR 3 -- this has wildly different fixities in different libraries + + -- ? + -- ":-:" -> fixity _ _ + -- ":." -> fixity _ _ + -- ":/:" -> fixity _ _ + -- "::->" -> fixity _ _ + -- ":<:" -> fixity _ _ + -- ":<=:" -> fixity _ _ + -- ":=:" -> fixity _ _ + -- ":>:" -> fixity _ _ + -- ":>=:" -> fixity _ _ str -> case (Safe.headMay str, Safe.lastMay str) of (Just '\'', _) -> hardcodedFixity False (drop 1 str) @@ -277,3 +405,4 @@ hardcodedFixity allowUnqualify = \case (Just c, _) | Data.Char.isAlpha c && allowUnqualify -> hardcodedFixity False $ dropWhile (\x -> (Data.Char.isAlpha x || x == '.')) str _ -> Nothing + where fixity a b = Just (Fixity NoSourceText b a)