[Haskell-cafe] Extending constraints
Bas van Dijk
v.dijk.bas at gmail.com
Tue Jun 5 19:52:02 CEST 2012
On 5 June 2012 18:46, Gábor Lehel <illissius at gmail.com> wrote:
> I must be missing something, but this seems a bit useless to me. You
> have a phantom type parameter on Proxy, and then you're hiding it. So
> when you pattern match on ProxyWrapper you recover the fact that there
> was a type which satisfies the constraint, but you don't know what
> type it was, and neither do you know about any values which are of the
> type. What are you trying to do?
I need a list of types that satisfy a certain constraint. I would like
to have the static guarantee that types that don't satisfy the
constraint can't be put in the list, as in:
nums :: [ProxyWrapper Num]
nums = [ ProxyWrapper (Proxy :: Proxy Int)
, ProxyWrapper (Proxy :: Proxy Double)
, ProxyWrapper (Proxy :: Proxy String) -- not allowed
]
fracs :: [ProxyWrapper Fractional]
fracs = [ ProxyWrapper (Proxy :: Proxy Double)
, ProxyWrapper (Proxy :: Proxy Float)
, ProxyWrapper (Proxy :: Proxy Int) -- not allowed
]
> That said, if you want to be able to recover a Typeable constraint, I
> don't see any way except for using 'ProxyWrapper (Ext Typeable
> constraint)' as Andres says or putting 'forall a. (constraint a,
> Typeable a)' in the definition of ProxyWrapper.
Indeed, I'm now going for the latter option.
Regards,
Bas
More information about the Haskell-Cafe
mailing list