Re: Changing - to :=

2000-05-01 Thread Julian Assange

"Mike Jones" [EMAIL PROTECTED] writes:

 imperative constructs, then build it in another language. If I can use :=, I
 can make it look more like the final system, which is good for

"-" is visually intuitive and faster to type than ":=". So even in completely
new (non ML/Haskell derived) language it seems preferable.




Class instantiation and polymorphic types - a proposal for a syntax extension

2000-05-01 Thread Wojciech Moczydlowski, Jr

Suppose I have a type:

data A a b = A a String b Int

and classes

class C1 t where
c1 :: t a - (a, Int)

class C2 t where
c2 :: t a - (a, String)

 (the example is not practical, but shows the case).
Now, whilst I can say:

instance C1 (A a) where
c1 (A a s b i) = (b, i)

I cannot say:
instance C2 (A ...) where
c2 (A a s b i) = (a, s)

where ... is the missing syntax - for saying that I want to generalize over the
first type variable in A, not the second one as in instance C1. Wouldn't it
be nice to be able to say, in the place of ..., something like A _ a? Or
more generally, to develop some syntax for types like A, to create from
A not only:

type B = A (Int, Int)  --  A (Int, Int) String b Int

but also:

type B1 = ...   --  A a String (Int, Int) Int

where again ... is the missing syntax (A _ (Int, Int)? ).
If that would be possible, I could ask for even more happiness - to be able
to name the order of holes left in a definition, so that 
(pseudo-syntax):

data A a b c = A a b c

type C = A _2 _1 Int  -- C String Char = A Char String Int
  -- C String = A _1 String Int
  -- C = A _2 _1 Int

The "normal" definitions can be translated to a new syntax:

type D = A Int   -- D = A Int _1 _2

It all comes to lambda-expressions on types - 

type C = \b a - A a b Int

instance C2 (\a - A a b) where
instance C1 (\b - A a b) where

The rule of translation from normal syntax is obvious - if we have
data A a1 ... an = A a1 ... an, then 

A a1 translates to (\a2 ... an - A a1 ... an)
A a1 a2 translates to (\a3 ... an - A a1 ... an)

and so on.

It's just a couple of thoughts, perhaps impossible to implement or having
some hidden flaws - I do not know. But it really would be helpful sometimes - 
when dealing with very general types and operations on them.

Khaliff TM   [EMAIL PROTECTED]