[GHC] #9918: GHC chooses an instance between two overlapping, but cannot resolve a clause within the similar closed type family
GHC
ghc-devs at haskell.org
Tue Dec 23 23:02:57 UTC 2014
#9918: GHC chooses an instance between two overlapping, but cannot resolve a
clause within the similar closed type family
-------------------------------------+-------------------------------------
Reporter: qnikst | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.3
Resolution: | Keywords:
Operating System: | Architecture: Unknown/Multiple
Unknown/Multiple | Difficulty: Unknown
Type of failure: | Blocked By:
None/Unknown | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by qnikst):
I read the article and see a reasoning behind this solution, also I don't
have an ideas or wishes about what solution will be right one.
> Your program depends in a very delicate way on the treatment of
infinite types. I wonder if it needs to?
I was a region code by Kiselev et al. And me and Oleg decided to give
closed type families try to remove overloaded instances in the code. There
are few other approaches that I have found like expressing type of the
monadic stack as a typelevel list of monadic stacks then then check only
relevant parts of that list, or calculate list length.
{{{
type family Listify (a :: * -> *) :: [* -> *] where
Listify (IORT s m) = IORT s m ': Listify m
Listify m = '[m]
}}}
Either of this approaches partially fix the issue, i.e. the code will work
for statically known stack, for example:
{{{
test_copy = runSIO $ do
hout <- newSHandle
newRgn $ shPutStrLn hout
runSIO :: (forall s. IORT s IO v) -> IO v
runSIO = newRgn
}}}
But this approach do not allow to write region polymorphic code, as in all
the cases I'm facing
a case there type family can no longer be reduced as in all cases I'm
finishing with something like:
`MyTypeFamily (Listify m) (IORT s m, Listify m)` and at this point it's
not possible to make a right choice.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9918#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list