[GHC] #14869: Documentation for isLiftedTypeKind is incorrect
GHC
ghc-devs at haskell.org
Wed Feb 28 14:27:10 UTC 2018
#14869: Documentation for isLiftedTypeKind is incorrect
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 8.2.2
checker) |
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Documentation | Unknown/Multiple
bug | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by RyanGlScott:
Old description:
> I [https://github.com/ghc-proposals/ghc-
> proposals/pull/32#issuecomment-369252383 noticed recently] that Template
> Haskell reifies `Constraint` as `Type`:
>
> {{{#!hs
> $ ~/Software/ghc2/inplace/bin/ghc-stage2 --interactive
> GHCi, version 8.5.20180221: http://www.haskell.org/ghc/ :? for help
> Loaded GHCi configuration from /home/rgscott/.ghci
> λ> :set -XTypeFamilies -XTemplateHaskell
> λ> :m + Data.Kind Language.Haskell.TH
> λ> type family Foo :: Constraint
> λ> putStrLn $(reify ''Foo >>= stringE . pprint)
> type family Ghci1.Foo :: *
> }}}
>
> The root of the issue can be traced back to the `isLiftedTypeKind`
> function, which `TcSplice` uses to distinguish `Type` from `Constraint`.
> At least, that's what its
> [http://git.haskell.org/ghc.git/blob/df2c3b3364834d2fd038192c89348fc50a2e0475:/compiler/types/TyCoRep.hs#l721
> documentation] claims:
>
> {{{
> -- | This version considers Constraint to be distinct from *. Returns
> True
> -- if the argument is equivalent to Type and False otherwise.
> isLiftedTypeKind :: Kind -> Bool
> isLiftedTypeKind = is_TYPE is_lifted
> where
> is_lifted (TyConApp lifted_rep []) = lifted_rep `hasKey`
> liftedRepDataConKey
> is_lifted _ = False
> }}}
>
> However, in practice this claim about treating `Constraint` and `Type` as
> distinct is false:
>
> {{{
> $ ~/Software/ghc2/inplace/bin/ghc-stage2 --interactive -package ghc
> GHCi, version 8.5.20180221: http://www.haskell.org/ghc/ :? for help
> Loaded GHCi configuration from /home/rgscott/.ghci
> λ> :m + TyCoRep TysWiredIn
> λ> isLiftedTypeKind liftedTypeKind
> True
> λ> isLiftedTypeKind constraintKind
> True
> }}}
>
> Either we should change the implementation of `isLiftedTypeKind` to match
> the documentation's claim, or change the documentation.
New description:
I [https://github.com/ghc-proposals/ghc-
proposals/pull/32#issuecomment-369252383 noticed recently] that Template
Haskell reifies `Constraint` as `Type`:
{{{
$ ~/Software/ghc2/inplace/bin/ghc-stage2 --interactive
GHCi, version 8.5.20180221: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
λ> :set -XTypeFamilies -XTemplateHaskell
λ> :m + Data.Kind Language.Haskell.TH
λ> type family Foo :: Constraint
λ> putStrLn $(reify ''Foo >>= stringE . pprint)
type family Ghci1.Foo :: *
}}}
The root of the issue can be traced back to the `isLiftedTypeKind`
function, which `TcSplice` uses to distinguish `Type` from `Constraint`.
At least, that's what its
[http://git.haskell.org/ghc.git/blob/df2c3b3364834d2fd038192c89348fc50a2e0475:/compiler/types/TyCoRep.hs#l721
documentation] claims:
{{{
-- | This version considers Constraint to be distinct from *. Returns
True
-- if the argument is equivalent to Type and False otherwise.
isLiftedTypeKind :: Kind -> Bool
isLiftedTypeKind = is_TYPE is_lifted
where
is_lifted (TyConApp lifted_rep []) = lifted_rep `hasKey`
liftedRepDataConKey
is_lifted _ = False
}}}
However, in practice this claim about treating `Constraint` and `Type` as
distinct is false:
{{{
$ ~/Software/ghc2/inplace/bin/ghc-stage2 --interactive -package ghc
GHCi, version 8.5.20180221: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
λ> :m + TyCoRep TysWiredIn
λ> isLiftedTypeKind liftedTypeKind
True
λ> isLiftedTypeKind constraintKind
True
}}}
Either we should change the implementation of `isLiftedTypeKind` to match
the documentation's claim, or change the documentation.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14869#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list