diff --git a/src/Agda2Hs/HsUtils.hs b/src/Agda2Hs/HsUtils.hs index 1c4efae0..9ea166a9 100644 --- a/src/Agda2Hs/HsUtils.hs +++ b/src/Agda2Hs/HsUtils.hs @@ -251,9 +251,14 @@ insertPars fixs = \case needParen _ Nothing _ = True -- If we don't know, add parens needParen _ _ Nothing = True - parL topOp = \case - e@Lambda{} -> Paren () e - e -> par topOp (needParen (AssocLeft () /=)) e + needParenExpr (InfixApp _ _ _ e2) = needParenExpr e2 + needParenExpr Lambda{} = True + needParenExpr _ = False + + parL topOp e = + if needParenExpr e + then Paren () e + else par topOp (needParen (AssocLeft () /=)) e parR topOp = par topOp (needParen (AssocRight () /=)) par topOp need e@(InfixApp _ _ op _) diff --git a/test/AllTests.agda b/test/AllTests.agda index d2459f9d..04dd103b 100644 --- a/test/AllTests.agda +++ b/test/AllTests.agda @@ -84,6 +84,7 @@ import Issue301 import Issue305 import Issue302 import Issue309 +import Issue317 {-# FOREIGN AGDA2HS import Issue14 @@ -165,4 +166,5 @@ import Issue301 import Issue305 import Issue302 import Issue309 +import Issue317 #-} diff --git a/test/Issue317.agda b/test/Issue317.agda new file mode 100644 index 00000000..788d8dbd --- /dev/null +++ b/test/Issue317.agda @@ -0,0 +1,11 @@ +open import Haskell.Prelude + +record D : Set where + constructor C + field unC : Int +open D public +{-# COMPILE AGDA2HS D #-} + +test : D → D +test d = C ∘ unC $ d +{-# COMPILE AGDA2HS test #-} diff --git a/test/golden/AllTests.hs b/test/golden/AllTests.hs index 35450b76..7999298b 100644 --- a/test/golden/AllTests.hs +++ b/test/golden/AllTests.hs @@ -79,4 +79,5 @@ import Issue301 import Issue305 import Issue302 import Issue309 +import Issue317 diff --git a/test/golden/Issue317.hs b/test/golden/Issue317.hs new file mode 100644 index 00000000..d9a23a06 --- /dev/null +++ b/test/golden/Issue317.hs @@ -0,0 +1,7 @@ +module Issue317 where + +data D = C{unC :: Int} + +test :: D -> D +test d = (C . \ r -> unC r) $ d +