Doesn't accept type
import Data.Kind
import qualified Control.Category as Cat
newtype Transformer f g where
Transform :: (forall i. f i ~> g i) -> Transformer f g
type family
(~>) :: k -> k -> Type where
(~>) = (->)
(~>) = Transformer
instance
Cat.Category ((~>) :: k -> k -> Type)
=>
Cat.Category (Transformer :: (i -> k) -> (i -> k) -> Type) where
id :: forall (f :: i -> k). Transformer f f
id = Transform Cat.id
works, as well as omitting the instance signature:
id = Transform Cat.id
Implicitly quantifying f or omitting its kind signature result in the same error:
id :: Transformer f f
id = Transform Cat.id
-- • Could not deduce (Cat.Category (~>))
-- arising from a use of ‘Cat.id’
-- from the context: Cat.Category (~>)
-- bound by the instance declaration at /tmp/tX81.hs:(13,3)-(15,60)
-- • In the first argument of ‘Transform’, namely ‘Cat.id’
-- In the expression: Transform Cat.id
-- In an equation for ‘id’: id = Transform Cat.id
-- Compilation failed.
Should it compile
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |