[Haskell-cafe] Eliminating phantom type

MarLinn monkleyon at gmail.com
Sat Apr 8 11:57:01 UTC 2017


Hi Timotej,

I must admit I haven't fully analyzed the problem, but this type of 
question intuitively sounds like a job for…
*drumroll*
Type Families! (or his sidekick, functional dependencies)


> newtype ST2 r w s a = ST2 { unwrapST2 :: ST s a }
>     deriving (Functor)
>
> But as you can see, now all my types got tainted by s even though 
> sharing the same r or w implies sharing the same s. Is there a way how 
> to hide s from the type signatures, but still preserve an ability to 
> write runST2 without resorting to IO/RealWorld? I have tried writing 
> such a function and failed.

As I said, I have almost no idea what I'm doing, but maybe you could get 
somewhere along the lines of

	type family StateSupporting reading writing :: *

	newtype ST2 r w a = ST2 { unwrapST2 :: ST (StateSupporting r w) a }

?

Cheers,
MarLinn

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170408/7518783d/attachment.html>


More information about the Haskell-Cafe mailing list