
This works: -- Tensor product of two vector spaces type family Tensor u v :: * type instance Tensor (Vect k a) (Vect k b) = Vect k (TensorBasis a b) On Aug 21, 2010, at 9:15 AM, DavidA wrote:
Brandon S Allbery KF8NH
writes: type Tensor u v = (u ~ Vect k a, v ~ Vect k b) => Vect k (TensorBasis a b) -- **
IIRC this actually substitutes as
(forall k a b. (u ~ Vect k a, v ~ Vect k b) => Vect k (TensorBasis a b))
and the implicit forall will generally mess things up because it won't be floated out to the top level. (Or in other words, constraints in type declarations don't generally do what you intend.)
Thanks. Is it possible to elaborate a bit - I still don't really understand what goes wrong. And is there any way to fix it?
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Sjoerd Visscher http://w3future.com