Language of Traits

LanguageOfTraits.lf:
let

  TraitSupport = load "Traits.lf"   // import meta model for traits

in

  (|
    // keyword 'trait'
  
    trait = (\TraitName:: (\TraitConstructor:: TraitConstructor (| traitName = TraitName |))),

    // keyword 'provides'
  
    provides = (\Args:: (\Provided:: (\ReqCont:: ReqCont (| Args, provides = Provided |)))),
  
    // keyword 'requires'
  
    requires = (\Args:: (\Required:: TraitSupport.newTrait (| Args, requires = Required |))),
    
    // trait composition
    
    // keyword 'join'
    
    join = (\Args:: (\Left:: (\JoinCont:: JoinCont (| Args, left = Left |)))),
  
    // keyword 'with'
  
    with = (\Args:: (\Right:: TraitSupport.composeTraits (| Args, right = Right |))),
    
    // Auxiliaries                         

    // keyword 'refine'
    
    refine = (\Trait:: (\TraitModifier:: TraitModifier (| trait = Trait |))),

    // Method aliasing, keyword 'aliases'
    
    aliases = (\Args:: (\Aliases:: TraitSupport.aliasMethods (| Args, aliases = Aliases |))),
    
    // Method exclusion, keyword 'exclude'
    
    exclude = (\Args:: (\Exclude:: TraitSupport.excludeMethods (| Args, excludes = Exclude |)))
  |)
  
end    
    

Last modified: 2006-02-11 — Markus Lumpe