<div dir="ltr"><div>Consider<br></div><div><br></div><div>> let f1 x     = x + 1 in f1 1             -- ==> 2 ok</div><div>> let f2 x y   = x + y in (f2 2) 3     -- ==> 5 ok</div><div>> let (f2 x) y = x + y in f2 3 4      -- ==> 7 ok</div><div>> let (f1 x)   = x + 1 in f1 4</div><div><br></div><div>The last gives a syntax error `Parse error in pattern: f1`. This is in line with the Language Report, but why? Something to do with patterns?</div><div><br></div><div>> let ( x )    = 1      in x             -- ==> 1 ok</div><div>> let (Just x) = Just 6 in x           -- ==> 6, pattern binding for x ok</div><div>> let  Just x  = Just 7 in x           -- ==> 7 ok </div><div>> let (CP x y) = (CP 1) 2 in x    -- ==> 1.0 ok</div><div>> let (CP x) y = (CP 3) 4 in x      -- `Parse error in pattern: (CP x)`</div><div><br></div><div>So the parens are optional for a pattern binding. But if you use them they must enclose the whole pattern -- unlike partially applying a data constr on rhs.</div><div><br></div><div>OTOH for a function binding, on lhs there must be at least one var (or pattern) not appearing inside outermost parens.   Why not optional parens around a whole function binding?</div><div><br></div><div>It might be your lhs is declaring an operator. Then that can't be inside parens, fair enough:</div><div><br></div><div>> let (Just x) +? (Just y) = (x +) y in ...   -- ok</div><div>> let ((Just x) +?) (Just y) = x + y in ...    -- rejected</div><div><br></div><div>Lexically we can tell a function (starts lower case) from a data constr. Why the extra restriction with the parens?</div><div><br></div><div>AntC</div></div>