
#11616: Kinds aren't instantiated -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.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 goldfire): This is almost correct behavior. The only incorrect part of this is that visible type application is available on the kind argument to `whoami` even though the kind variable was not written in the declaration of `Whomami`. You hint at this weirdness at the end of your post, where the braces mean that a variable is not available for visible type application (because GHC inferred its presence and ordering). This is a known bug that I intend to fix. But everything else is OK. The problem is that visible type application should work on only type variables that are written by the user. (I have clarified this in unpushed edits to the manual.) When you say `whoami2 = whoami`, you're not giving a type signature to `whoami2`, and therefore usages of `whoami2` cannot use visible type application. This design decision was made to help keep usage of visible type application retain the same meaning as GHC's inference algorithm evolves. Without visible type application, `whoami2`'s type is indeed ambiguous and problematic. The problem is the same with `whoamiType`. And indeed, if you give a type signature, all is OK: {{{ whoamiType :: forall a. Whoami (a :: Type) => String whoamiType = whoami @_ @a }}} I'm keeping this bug open to track the fix for the first issue, and as an interesting test case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11616#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler