
#15649: Errors about ambiguous untouchable variable when using constraint variable in RankN type -------------------------------------+------------------------------------- Reporter: infinity0 | Owner: (none) Type: bug | Status: closed Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.4.3 Resolution: duplicate | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #10651, #14921 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by infinity0): OK, thanks for explaining. Looks like adding a `Proxy r` as mentioned on #10651 also works here, and you don't need `AllowAmbiguousTypes` or `TypeApplications`. It might be good to have the error message (r0 is untouchable etc) mention this workaround. (I had known of the trick of giving a ghost parameter in other similar cases with ambiguous types, but here `r` is of kind `* -> Constraint` so that doesn't work and one *has* to use `Proxy` here.) {{{#!haskell loadAll2 :: forall a r . (DynPS r a) => (forall ref. r ref => ref -> PSAny r) -> Proxy r -> a -> Maybe a loadAll2 loader _ r = loadAll (DynLoad' loader :: DynLoad' r) r testCallable2 :: IO (Maybe ()) testCallable2 = return $ loadAll2 undefined (Proxy :: Proxy Unconstrained) () }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15649#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler