Permalink
Switch branches/tags
Nothing to show
Commits on Feb 18, 2012
Commits on Feb 4, 2012
Commits on Jan 16, 2012
  1. Fix #39

    Also rewrote NSArray/NSDictionary extension in Foam.
    committed Jan 16, 2012
  2. Added BlockType constructor for Type ADT (close #31)

    Also made a clearer syntax for block types. Before:
    
        - useBlock:{BOOL(^)((NSString*)(^)(const char*),NSString*)}block [ ].
    
    After:
    
        - useBlock:{(const char * => NSString *), NSString * => BOOL }blk [ ].
    committed Jan 16, 2012
  3. rename Autotype => AutoType

    committed Jan 16, 2012
Commits on Jan 15, 2012
  1. Correct some example code

    committed Jan 15, 2012
  2. Close #32; close #33

    * 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').
    committed Jan 15, 2012
  3. (Trailing whitspace)

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

    in moderation
    committed Jan 14, 2012
  2. Generalized Inferrable instance

    ∀α. Inferrable α ⇒ Inferrable [α]
    committed Jan 14, 2012
  3. Remove foam binary from VC, improve build script

    Build script will remove old report.html
    committed Jan 14, 2012
  4. Cleanup parser modules

    Also remove unnecessary imports in Language.Foam.Compile
    committed Jan 14, 2012
  5. Improved Foam.Compile.makeNSNumber

    :: Show a => a -> String -> String
    committed Jan 14, 2012
  6. Rudimentary recursive type-unification and inference (close #22)

    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.
    committed Jan 14, 2012
  7. Cleanup parsers and types (close #24)

    * "@@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
    committed Jan 14, 2012
  8. Typo

    committed Jan 14, 2012
  9. Updated syntax in README

    (fewer dots)
    committed Jan 14, 2012
  10. hlint, bitches!

    committed Jan 14, 2012
  11. Added special object operators <$>, <~, ~>

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

    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.
    committed Jan 13, 2012