Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: master
Commits on Feb 18, 2012
Commits on Feb 4, 2012
Commits on Jan 16, 2012
  1. Fix #39

    authored
    Also rewrote NSArray/NSDictionary extension in Foam.
  2. Added BlockType constructor for Type ADT (close #31)

    authored
    Also made a clearer syntax for block types. Before:
    
        - useBlock:{BOOL(^)((NSString*)(^)(const char*),NSString*)}block [ ].
    
    After:
    
        - useBlock:{(const char * => NSString *), NSString * => BOOL }blk [ ].
Commits on Jan 15, 2012
  1. Correct some example code

    authored
  2. Close #32; close #33

    authored
    * Each Module can have 0+ classes.
    + Module filenames are taken from the name of the first class, or from
    the name of the first category ('Class+Category').
  3. (Trailing whitspace)

    authored
Commits on Jan 14, 2012
  1. View Patterns can be cool

    authored
    in moderation
  2. Generalized Inferrable instance

    authored
    ∀α. Inferrable α ⇒ Inferrable [α]
  3. Remove foam binary from VC, improve build script

    authored
    Build script will remove old report.html
  4. Cleanup parser modules

    authored
    Also remove unnecessary imports in Language.Foam.Compile
  5. Improved Foam.Compile.makeNSNumber

    authored
    :: Show a => a -> String -> String
  6. Rudimentary recursive type-unification and inference (close #22)

    authored
    Previously, the first return statement found within a method or block
    was assumed to determine the return type of that method or
    block. There was no attempt to unify that type with the constraints
    provided by other return statements. Furthermore, return statements
    within conditionals were not taken into account.
    
    Now, all the types of return statements (including those embedded in
    conditionals) are collected; type inference is the catamorphism of
    unification over constraint-gathering. That is, for differing types T
    and T', the closest type that allows both T and T' is chosen; this
    operation is folded over the gathered types, yielding the most
    specific return type possible for the given constraints.
    
    The unification rules are not very smart yet. This will need to
    improve.
    
    Furthermore, when unification is impossible, |error| is used. If this
    becomes a thing that can ever happen in real code (so far, it is not
    possible, since there is no instance in which a |VoidType| is inferred
    as a constraint), we will need to make type checking into its own
    phase with some sort of State Monad, perhaps, in order to provide
    context for the type error. I'm going to avoid this for now.
  7. Cleanup parsers and types (close #24)

    authored
    * "@@msg" => "[[self class] msg]" substitution uses AST rather than string hack
    * was able to get rid of special Value case for invocation expressions
    * minor style cleanup
  8. Typo

    authored
  9. Updated syntax in README

    authored
    (fewer dots)
  10. hlint, bitches!

    authored
  11. Added special object operators <$>, <~, ~>

    authored
    These compile to the following messages: -fm_map:, -fm_foldLeft:, and
    -fm_foldRight:.
    
    (#15)
Commits on Jan 13, 2012
  1. Unified operator support over objects and primitives (#15)

    authored
    I had to change the architecture of the message expression AST. It's
    superior, in that message chains are now produced using the chainl1
    combinator.
    
    There's a separate anamorphism in which left-factored message
    expressions (Receiver,[Message]) are built up into a recursive
    structure that allows different kinds of expressions (messages,
    invocations, binary operations) to be nested in any order.
Something went wrong with that request. Please try again.