[GHC] #9622: GHCi command to solve a constraint

GHC ghc-devs at haskell.org
Sun Sep 21 14:10:40 UTC 2014


#9622: GHCi command to solve a constraint
-------------------------------------+-------------------------------------
              Reporter:  monoidal    |            Owner:
                  Type:  feature     |           Status:  new
  request                            |        Milestone:
              Priority:  normal      |          Version:  7.8.3
             Component:  Compiler    |         Keywords:
  (Type checker)                     |     Architecture:  Unknown/Multiple
            Resolution:              |       Difficulty:  Unknown
      Operating System:              |       Blocked By:
  Unknown/Multiple                   |  Related Tickets:
       Type of failure:              |
  None/Unknown                       |
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------
Description changed by monoidal:

Old description:

> It would be nice to have a `:solve` command for ghci that took a class
> constraint and returned either its derivation or an error message. A
> possible interface could look like so:
>
> {{{
> ghci> :solve Eq (Maybe Type1, Bool)
> 1) instance Eq Type1                 -- Defined in ‘MyModule’
> 2) instance Eq a => Eq (Maybe a)     -- Defined in ‘GHC.Classes’
> 3) instance Eq (Maybe Type1)         -- Put a ~ Int in 2) and use 1)
> 4) instance Eq Bool                  -- Defined in ‘GHC.Classes’
> 5) instance (Eq a, Eq b) => Eq (a,b) -- Defined in ‘GHC.Classes’
> 6) instance Eq (Maybe Type1, Bool)   -- Put a ~ Maybe Type1, b ~ Bool in
> 5) and use 3), 4)
> ghci> :solve Eq (Int -> Int)
> No instance for Eq (Int -> Int)
> }}}

New description:

 It would be nice to have a `:solve` command for ghci that took a class
 constraint and returned either its derivation or an error message. A
 possible interface could look like so:

 {{{
 ghci> :solve Eq (Maybe Type1, Bool)
 1) Eq Type1                 -- Defined in ‘MyModule’
 2) Eq a => Eq (Maybe a)     -- Defined in ‘GHC.Classes’
 3) Eq (Maybe Type1)         -- Put a ~ Int in 2) and use 1)
 4) Eq Bool                  -- Defined in ‘GHC.Classes’
 5) (Eq a, Eq b) => Eq (a,b) -- Defined in ‘GHC.Classes’
 6) Eq (Maybe Type1, Bool)   -- Put a ~ Maybe Type1, b ~ Bool in 5) and use
 3), 4)
 ghci> :solve Eq (Int -> Int)
 No instance for Eq (Int -> Int)
 }}}

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9622#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list