Difference between revisions of "User:Zzo38/Proposal for more-notation"

From HaskellWiki
Jump to navigation Jump to search
Line 10: Line 10:
 
A more-declaration is a module-level declaration of this syntax:
 
A more-declaration is a module-level declaration of this syntax:
 
* ''['' ''numeric_literal'' ''|'' <tt>(</tt>''enumeration_constructor''<tt>)</tt> '']'' ''more_name'' ''{parameters}'' <tt>=</tt> ''contents'' ''{'' <tt>|</tt> ''contents'' ''}'' <tt>;</tt>
 
* ''['' ''numeric_literal'' ''|'' <tt>(</tt>''enumeration_constructor''<tt>)</tt> '']'' ''more_name'' ''{parameters}'' <tt>=</tt> ''contents'' ''{'' <tt>|</tt> ''contents'' ''}'' <tt>;</tt>
  +
* ''numeric_literal'': It should be a natural number. Omitted is the same as zero.
  +
* ''enumeration_constructor'': A constructor of the enumeration that was specified in the more-notation. If an enumeration is specified, the enumeration constructor is required here.
  +
* ''parameters'': Lowercased names which will be scoped locally to this declaration. The number of parameters must match the number of parameters specified in the more-notation.
  +
* ''contents'': The contents depends on where the more-notation is.
   
 
==Semantics==
 
==Semantics==
  +
In the place where the more-notation is, all contents of more-declarations of that name will be reordered and corrected before being placed in place of the more-notation.
  +
  +
Automatic reordering is overridden by the enumeration constructors or numeric literals in front of more-declarations.
   
 
==Uses==
 
==Uses==
Line 20: Line 27:
   
 
===Datatype declarations===
 
===Datatype declarations===
  +
A constructor definition in a data declaration is allowed to be replaced by a more-notation. Semantics of more-declarations becomes as follows:
  +
* Duplicate constructors are removed.
  +
* Duplicate constructors that do not match are errors.
  +
* Multiple constructors in a single more-declaration are guaranteed to keep the order given.
  +
  +
Example:
  +
data T = Zero | more T deriving (Eq);
  +
T = Two | Three | Four;
  +
T = One | Two;
  +
becomes
  +
data T = Zero | One | Two | Three | Four deriving (Eq);
   
 
===Fields in record syntax===
 
===Fields in record syntax===
Line 30: Line 48:
   
 
===Manipulation in splices===
 
===Manipulation in splices===
  +
  +
===Types and constructors===

Revision as of 20:47, 27 August 2011

This document is proposal for more-notation in Haskell.

Syntax

Anywhere that a more-notation is allowed (see Uses), you can use the syntax:

  • more [(name_of_enumeration)] more_name {parameters}
  • name_of_enumeration: A name of any type which is an enumeration. It can be another one using more-notation, but it must be able to fully determine it before this more-notation can be fully determined.
  • more_name: A capitalized name. It uses the same namespace as constructors, so you are not allowed to have a constructor of the same name (although it is OK to have types of the that name).
  • parameters: Optional lowercased names. These names are in local scope, and may already exist in this scope, although they do not have to.

A more-declaration is a module-level declaration of this syntax:

  • [ numeric_literal | (enumeration_constructor) ] more_name {parameters} = contents { | contents } ;
  • numeric_literal: It should be a natural number. Omitted is the same as zero.
  • enumeration_constructor: A constructor of the enumeration that was specified in the more-notation. If an enumeration is specified, the enumeration constructor is required here.
  • parameters: Lowercased names which will be scoped locally to this declaration. The number of parameters must match the number of parameters specified in the more-notation.
  • contents: The contents depends on where the more-notation is.

Semantics

In the place where the more-notation is, all contents of more-declarations of that name will be reordered and corrected before being placed in place of the more-notation.

Automatic reordering is overridden by the enumeration constructors or numeric literals in front of more-declarations.

Uses

Do-blocks

Case alternatives

Datatype declarations

A constructor definition in a data declaration is allowed to be replaced by a more-notation. Semantics of more-declarations becomes as follows:

  • Duplicate constructors are removed.
  • Duplicate constructors that do not match are errors.
  • Multiple constructors in a single more-declaration are guaranteed to keep the order given.

Example:

data T = Zero | more T deriving (Eq);
T = Two | Three | Four;
T = One | Two;

becomes

data T = Zero | One | Two | Three | Four deriving (Eq);

Fields in record syntax

Lists

Combining with Template Haskell

Uses in quotations

Manipulation in splices

Types and constructors