[GHC] #12376: Allow function definitions in record syntax
GHC
ghc-devs at haskell.org
Fri Oct 7 03:58:28 UTC 2016
#12376: Allow function definitions in record syntax
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by nomeata):
Replying to [comment:3 Iceland_jack]:
> A hypothetical `\case2` may be better
>
> {{{#!hs
> eqList a = MkEq
> { (==) = \case2
> ([], []) -> True
> (x:xs, y:ys) -> ...
> (_, _) -> False
> , (/=) = neqDef (eqList a)
> }
> }}}
>
> Given an extension that allows user to omit tuple parentheses when un-
ambiguous (similar to Agda's `_,_` constructor which looks like `a , b`
when applied to two arguments) this looks even better
>
> {{{#!hs
> eqList a = MkEq
> { (==) = \case2
> [], [] -> True
> x:xs, y:ys -> ...
> _, _ -> False
> , (/=) = neqDef (eqList a)
> }
> }}}
Why not go all the way and allow the full syntax of function definitions
here, just as in a module scope, in an instance declaration, in a where
clause or in a let clause:
{{{#!hs
eqList a = MkEq
{ [] == = True
(x:xs) == (y:ys) = …
_ == _ = False
, (/=) = neqDef (eqList a)
}
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12376#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list