finish fixing android build after tor merge
authorJoey Hess <joeyh@joeyh.name>
Mon, 12 Dec 2016 17:27:39 +0000 (13:27 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 12 Dec 2016 17:27:39 +0000 (13:27 -0400)
Build/EvilSplicer.hs

index 9a9dffa42010ef7d1272d28579afa5513b5b98c1..ca690c2501adf2ecd4a17f3fd88faea59a09a137 100644 (file)
@@ -486,18 +486,8 @@ mangleCode = flip_colon
         - So, we can put the semicolon at the start of every line
         - containing " -> " unless there's a "\ " first, or it's
         - all whitespace up until it.
-        -
-        - Except.. type signatures also contain " -> " sometimes starting
-        - a line:
-        -
-        - forall foo =>
-        -   Foo ->
-        -
-        - To avoid breaking these, look for the => on the previous line.
         -}
-       case_layout = parsecAndReplace $ do
-               void newline
-               lastline <- restOfLine
+       case_layout = skipfree $ parsecAndReplace $ do
                void newline
                indent1 <- many1 $ char ' '
                prefix <- manyTill (noneOf "\n") (try (string "-> "))
@@ -507,9 +497,7 @@ mangleCode = flip_colon
                                then unexpected "lambda expression"
                                else if null prefix
                                        then unexpected "second line of lambda"
-                                       else if "=>" `isSuffixOf` lastline
-                                               then unexpected "probably type signature"
-                                               else return $ "\n" ++ lastline ++ "\n" ++ indent1 ++ "; " ++ prefix ++ " -> "
+                                       else return $ "\n" ++ indent1 ++ "; " ++ prefix ++ " -> "
        {- Sometimes cases themselves span multiple lines:
         -
         - Nothing
@@ -520,7 +508,7 @@ mangleCode = flip_colon
         -        var var
         -   -> foo
         -}
-       case_layout_multiline = parsecAndReplace $ do
+       case_layout_multiline = skipfree $ parsecAndReplace $ do
                void newline
                indent1 <- many1 $ char ' '
                firstline <- restofline
@@ -533,6 +521,11 @@ mangleCode = flip_colon
                        else return $ "\n" ++ indent1 ++ "; " ++ firstline ++ "\n"
                                ++ indent1 ++ indent2 ++ "-> "
 
+       {- Type definitions for free monads triggers the case_* hacks, avoid. -}
+       skipfree f s
+               | "MonadFree" `isInfixOf` s = s
+               | otherwise = f s
+
        {- (foo, \ -> bar) is not valid haskell, GHC.
         - Change to (foo, bar)
         -