Is there any way of defining a type level projection without using type families?
I do it like so:
{-# LANGUAGE TypeFamilies #-}
type family Project t :: *
type instance Project [r] = r ,
but I really only ever use one instance of it.
Is there any way of defining a type level projection without using type families?
I do it like so:
{-# LANGUAGE TypeFamilies #-}
type family Project t :: *
type instance Project [r] = r ,
but I really only ever use one instance of it.
I am not sure where you are going to use that exactly. But I tend to use type level projections only to satisfy the haskell type system. What I usually do is to define a function like this:
project :: [a] -> a
project = undefined
Now using project on an object of type [a]
will give me an object of type a
.
Another function which I use (although sometimes) along with the above is asTypeOf
.
You can use
MultiParamTypeClass
andFunctionalDependencies
, though without knowing why you're using it it's hard to say if this is sufficient.