
#14917: Allow levity polymorhism in binding position -------------------------------------+------------------------------------- Reporter: andrewthad | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.2 Resolution: | Keywords: | LevityPolymorphism 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 dfeuer): Could we skirt the problem using typeclass machinery? Instead of {{{#!hs bTwice :: ∀ (r :: RuntimeRep) (a :: TYPE r). Bool → a → (a → a) → a }}} What if we have {{{#!hs bTwice :: ∀ (r :: RuntimeRep) (a :: TYPE r). KnownRep r => Bool → a → (a → a) → a }}} To call this function, we consult the `KnownRep` dictionary to discover its calling conventions. Obviously everything will be terrible if it doesn't specialize, but maybe there's a way to make it work soundly otherwise? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14917#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler