The problem is that Stack
is kind-polymorphic, so the type of empty
is:
ghci> :t empty
empty :: forall k (m :: k). Stack m => Container m (Elem m)
So you need to invoke it like this: empty @_ @(ListStack Int)
Alternatively, you can make Stack
and SizedStack
not kind-polymorphic by replacing k
with Type
. I don’t see any reason not to do that.