1/1: Building TypePat (TypePat.idr)
Main> Main.isNat
Arguments [{arg:1}]
Compile time tree: case {arg:1} of
  Nat => True
  _ => False
Compiled: \ {arg:1} => case {arg:1} of
  { Prelude.Types.Nat [tycon] => 1
  ; _ => 0
  }
Refers to: Prelude.Basics.True, Prelude.Basics.False
Refers to (runtime): Prelude.Types.Nat
Flags: allguarded, covering
Size change:
  Prelude.Basics.True:
    l
  r +
  Prelude.Basics.False:
    l
  r +
Main> Main.isInt32
Arguments [{arg:1}]
Compile time tree: case {arg:1} of
  Int32 => True
  _ => False
Compiled: \ {arg:1} => case {arg:1} of
  { Int32 [tycon] => 1
  ; _ => 0
  }
Refers to: Prelude.Basics.True, Prelude.Basics.False
Refers to (runtime): Int32
Flags: allguarded, covering
Size change:
  Prelude.Basics.True:
    l
  r +
  Prelude.Basics.False:
    l
  r +
Main> Prelude.Types.plus
Arguments [{arg:1}, {arg:2}]
Compile time tree: case {arg:1} of
  Z => {arg:2}
  S {e:1} => S (plus {e:1} {arg:2})
Compiled: \ {arg:1}, {arg:2} => case {arg:1} of
  { 0 => {arg:2}
  ; _ => let {e:1} = {arg:1} - 1 in
         ({e:1} + {arg:2}) + 1
  }
Refers to: Prelude.Types.plus, Prelude.Types.S
Flags: total
Size change:
  Prelude.Types.S:
    l
  r +
  Prelude.Types.plus:
    l 0 1
  r +----
  0 | <
  1 |   =
Main> Prelude.Types.minus
Arguments [{arg:1}, {arg:2}]
Compile time tree: case {arg:1} of
  Z => 0
  _ => case {arg:2} of
    Z => {arg:1}
    _ => case {arg:1} of
      S {e:1} => case {arg:2} of
        S {e:2} => minus {e:1} {e:2}
Compiled: \ {arg:1}, {arg:2} => case {arg:1} of
  { 0 => 0
  ; _ => case {arg:2} of
           { 0 => {arg:1}
           ; _ => case {arg:1} of
                    { 0 => crash "Nat case not covered"
                    ; _ => let {e:1} = {arg:1} - 1 in
                           case {arg:2} of
                             { 0 => crash "Nat case not covered"
                             ; _ => let {e:2} = {arg:2} - 1 in
                                    Prelude.Types.prim__integerToNat ({e:1} - {e:2})
                             }
                    }
           }
  }
Refers to: Prelude.Types.minus, Prelude.Types.Z
Refers to (runtime): Prelude.Types.prim__integerToNat
Flags: total
Size change:
  Prelude.Types.Z:
    l
  r +
  Prelude.Types.minus:
    l 0 1
  r +----
  0 | <
  1 |   <
Main> Prelude.Types.SnocList.filter
Arguments [{arg:1}, {arg:2}, {arg:3}]
Compile time tree: case {arg:3} of
  Lin {e:1} => [<]
  (:<) {e:2} {e:3} {e:4} => let rest = filter {arg:2} {e:3} in if {arg:2} {e:4} then rest :< {e:4} else rest
Erasable args: [0]
Inferrable args: [0]
Compiled: \ {arg:2}, {arg:3} => case {arg:3} of
  { _builtin.NIL {tag = 0} [nil] => _builtin.NIL {tag = 0} [nil]
  ; _builtin.CONS {tag = 1} [cons] {e:3} {e:4} => let rest = Prelude.Types.SnocList.filter {arg:2} {e:3} incase {arg:2} {e:4} of  { 1 => _builtin.CONS {tag = 1} [cons] rest {e:4}; 0 => rest}
  }
Refers to: Prelude.Basics.SnocList, Prelude.Basics.Lin, Prelude.Types.SnocList.case block in filter, Prelude.Types.SnocList.filter
Refers to (runtime): _builtin.CONS, _builtin.NIL, Prelude.Types.SnocList.filter
Flags: total
Size change:
  Prelude.Basics.Lin:
    l 0 1 2
  r +------
  0 | =   <
  Prelude.Types.SnocList.filter:
    l 0 1 2
  r +------
  0 | =   <
  1 |   =
  2 |     <
  Prelude.Basics.(:<):
    l 0 1 2
  r +------
  0 | =   <
  2 |     <
Main> 
Bye for now!
