anchor.diff:      | PostViewCommand of Command * View
       | BothViewCommand of View * Command * View
   
  -let wsChars = " \t\n"
  -let wsc = anyOf wsChars
  -let ws = manyChars wsc
  +type Method = {
  +    Name   : string
  +    Params : string list
  +    Body   : Command
  +}
  +
  +let wsChars = " \t\r\n"
  +let wsc : Parser<char, unit> = anyOf wsChars
  +let ws = spaces // skips over " \t\r\n" by definition
   let ws1 = many1Chars wsc
   
   let inBrackets bra ket = between (pstring bra .>> ws) (ws >>. pstring ket)
   let inParens p = inBrackets "(" ")" p
   let inBraces p = inBrackets "{" "}" p
  +let inAngles p = inBrackets "<" ">" p
   
   let parseBin sep fn = pstring sep .>> ws >>% fun x y -> fn(x, y)
   
  
positive.code: let notSpecial c = String.forall (fun d -> d <> c) (specChars + wsChars)
  let notSpecialWs c = String.forall (fun d -> d <> c) specChars
  
  let parseArgList = inParens (sepBy (many1Satisfy notSpecialWs) (ws >>. pstring "," .>> ws))
  let parseNamedView = many1Satisfy notSpecial |>> NamedView
  let parseUnit = pstring "emp" >>% Unit
  let parseBracketedView = inParens parseView
  let maybeAddArgs x =
      match x with
          | (v, Some args) -> Apply(v,args)
          | (v, None)      -> v
  let parseSimpleView = 
      choice [ parseUnit
             ; parseBracketedView
             ; parseNamedView
             ] .>>. ((parseArgList |>> Some <|>% None) .>> ws) |>> maybeAddArgs
  do parseViewRef :=
      chainl1 parseSimpleView (pstring "*" .>> ws >>% fun x y -> Join(x, y))
  
  let cas =
      Choice(Atomic("foo"), Skip)
  
negative.code: 
      ctx.Dispose
  
  let demoParser parser line =
      match run parser line with
          | Success(result, _, _)   -> printfn "Success: %A" result
          | Failure(errorMsg, _, _) -> printfn "Failure: %s" errorMsg
  
  let demoCommand = demoParser parseCommand
  
  let parseScript = ws >>. sepEndBy parseMethod ws
  
  let main =
      Console.WriteLine("Hello, world!")
      demoCommand "<a := b> || <c := d>* + (<foo>; <bar>)"
      demoCommand "{emp} <a := b> {fooBar()} || <c := d>* + (<foo>; <bar>)"
      demoParser parseScript """
      lock() {
        {emp}
          <t = ticket++;>
        {holdTickIf(true, t)}
          ;
          (
            {holdTickIf(true, t)}
              <s = serving;>
            {holdTickIf(s != t) * holdLockIf(s = t) * termIf(s = t)}
          )*
        {holdLockIf(true)}
      }
      """
      match run parseViewLine pv2 with
          | Success(result, _, _)   -> printfn "Success: %A" result
  