Hi,

I'm trying to make a syntax reference in the form
of source code. It's not ready, but if someone
shares the same ideas I could use some
help. (Should I put this on a wiki? Where?)

My “design principles” are:

• It should contain just pieces of uncommented
  code. The idea is not to use it as a fast
  tutorial, but as a reminder of how to write all
  kinds of things, and solve all questions of type
  “is this allowed?”;

• It should be small, and fit on a printed A4
  page;

• It should show the complete syntax of
  everything, not the most common. For instance,
  ‘case of’ should show the use of guards;

• It should be an example of valid code, not good
  one. The idea is to show what can be done, not
  what should :)

• It should use expanded code, not identation
  rules. Replacement of identation for code (like
  {} etc.) have simple rules, and the proper way
  to ident can be deduced from expanded
  code. Sometimes this is important if we are
  trying to solve syntax errors;

• It should use Unicode. It's nice to know which
  kind of Unicode characters can actually be
  used;

• It should use no predefined types or classes
  except Bool. I’ll write a Prelude code reference
  if this first attempt go right.

So I came up with the weird code below. It should
contain a lot more, and be more dense (more syntax
examples per lines of code), but it's already
usefull for a begginer like me. What do you think?

Best,
Maurício


module Ça (Exèmplo(Åwirù,Øwet'Л,Øwet'И),aҝҧү,Clááá) where {

  class Clááá ú where {
    (⊗) :: ú -> ú -> ú;
    τAmber :: ú -> ú;
    τAmber a = a ⊗ a;
  };

  data D١ = U1 | U2 | U3; data D٢ = Vú1 | Vú2 | JustVú;
  data D٤ = Opção | OutraOpção;
  data Exèmplo = Åwirù | Øwet'Л D٤  | Øwet'И D٢ Exèmplo;

  osmesmos :: D٤ -> D٤ -> Bool;
  osmesmos Opção Opção = True; osmesmos OutraOpção OutraOpção = True;
  osmesmos _ _ = False;

  aҝҧү = (Øwet'И Vú2 aҝҧү) ⊗ Åwirù;

  instance Clááá Exèmplo where {
    Åwirù ⊗ _ = Åwirù;
    a@(Øwet'Л b) ⊗ x = case x of {
      Åwirù -> a;
      y@(Øwet'Л o) | (osmesmos o Opção) -> a | otherwise -> Øwet'И Vú1 y;
      y@(Øwet'И _ _) -> y ⊗ a
    };
    a@(Øwet'И Vú1 _) ⊗ _ = a;
    a@(Øwet'И Vú2 x) ⊗ _ = x;
    a@(Øwet'И JustVú _) ⊗ y = y;
  }
}

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to