[Haskell-cafe] Context for type parameters of type constructors

Dylan Thurston dpt at lotus.bostoncoop.net
Mon Apr 5 12:39:03 EDT 2004


On Mon, Apr 05, 2004 at 01:59:18PM +0200, Henning Thielemann wrote:
>  In addition I separated a class VectorSpacePure from the VectorSpace
> class that contains the operations that don't need the scalar type 'a',
> i.e.  'zero' and 'add'.

I called this class 'Additive' in my old proposal to revamp the
numeric hierarchy of the basic Prelude, and made 'Num' inherit from
it:
http://www.haskell.org/pipermail/haskell-cafe/2001-February/001632.html

(Perhaps I should revive this proposal.  I have been using a newer
version in my own programs, but I didn't see a way to actually get it
widely adopted.  In particular, the design I proposed is somewhat
annoying to use because there's no defaulting and you have to add an
explicit type whenever you raise a number to an explicit integer
power.)

> Further I swapped consistently 'a' and 'v' in the class definition
> and in the quantity data type, i.e. "class VectorSpace a v" and
> "data Quantity a v". I suppose that it will more oftenly be
> necessary to say something about the vectors that can built from a
> certain scalar (i.e. Quantity a) rather than about the scalar types
> that can be the base of a vector type.

Yes, that's a good choice.

> > By the way, depending how you resolve the issue above, you might want
> > instead
> > 
> > > instance (RealFloat a, VectorSpace b a) => VectorSpace [b] a where
> > > ...
> 
> That's really a nice generalization! With the specialised instances for
> Float and Double as shown above this works. Now I can built VectorSpace
> over several levels, e.g. a list of complex numbers as vectors with
> respect to real numbers. But it prohibits functional dependency, right? 

No, it shouldn't, if you do it right.

> Functional dependency would probably allow the compiler to detect which
> scalar type is associated with an vector and thus the compiler wouldn't
> ask me to tell it explicitly all the time. 

Yes.  That's what you want if you only have one scalar type for a
given vector space.

> Maybe a type class like the VectorSpace finds the way to a revised version
> of Prelude?

I didn't include it in my proposal, because it uses multi-parameter
type classes, which are not in nhc, for instance.  I don't know that
it should be in the Prelude, but in the standard library.

There are a few design issues, as you noticed; it's particularly
annoying that you can't easily right 'instance (Num a) => VectorSpace
a a'.  

Peace,
	Dylan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org//pipermail/haskell-cafe/attachments/20040405/fb01ed72/attachment.bin


More information about the Haskell-Cafe mailing list