
contracts_with_subtypes.erl:106:18: The call contracts_with_subtypes:rec_arg
         ({'a', 'b'}) breaks the contract 
          (Arg) -> 'ok'
             when
                 Arg :: {'a', A} | {'b', B},
                 A :: 'a' | {'b', B},
                 B :: 'b' | {'a', A}
contracts_with_subtypes.erl:107:18: The call contracts_with_subtypes:rec_arg
         ({'b', 'a'}) breaks the contract 
          (Arg) -> 'ok'
             when
                 Arg :: {'a', A} | {'b', B},
                 A :: 'a' | {'b', B},
                 B :: 'b' | {'a', A}
contracts_with_subtypes.erl:109:19: The call contracts_with_subtypes:rec_arg
         ({'b', {'a', 'b'}}) breaks the contract 
          (Arg) -> 'ok'
             when
                 Arg :: {'a', A} | {'b', B},
                 A :: 'a' | {'b', B},
                 B :: 'b' | {'a', A}
contracts_with_subtypes.erl:135:15: The call contracts_with_subtypes:rec2
         ({'a', 'b'}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:136:15: The call contracts_with_subtypes:rec2
         ({'b', 'a'}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:137:16: The call contracts_with_subtypes:rec2
         ({'a', {'b', 'a'}}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:138:16: The call contracts_with_subtypes:rec2
         ({'b', {'a', 'b'}}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:139:17: The call contracts_with_subtypes:rec2
         ({'a', {'b', {'a', 'b'}}}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:140:17: The call contracts_with_subtypes:rec2
         ({'b', {'a', {'b', 'a'}}}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:141:18: The call contracts_with_subtypes:rec2
         ({'a', {'b', {'a', {'b', 'a'}}}}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:142:18: The call contracts_with_subtypes:rec2
         ({'b', {'a', {'b', {'a', 'b'}}}}) breaks the contract 
          (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:175:3: The pattern 
          1 can never match the type 
          string()
contracts_with_subtypes.erl:178:2: The pattern 
          'alpha' can never match the type 
          {'ok', _} | {'ok', _, string()}
contracts_with_subtypes.erl:180:2: The pattern 
          42 can never match the type 
          {'ok', _} | {'ok', _, string()}
contracts_with_subtypes.erl:196:2: The pattern 
          'alpha' can never match the type 
          {'ok', _}
contracts_with_subtypes.erl:198:2: The pattern 
          42 can never match the type 
          {'ok', _}
contracts_with_subtypes.erl:216:2: The pattern 
          'alpha' can never match the type 
          {'ok', _}
contracts_with_subtypes.erl:218:2: The pattern 
          42 can never match the type 
          {'ok', _}
contracts_with_subtypes.erl:235:3: The pattern 
          1 can never match the type 
          string()
contracts_with_subtypes.erl:238:2: The pattern 
          {'ok', _} can never match the type 
          {'ok', _, string()}
contracts_with_subtypes.erl:239:2: The pattern 
          'alpha' can never match the type 
          {'ok', _, string()}
contracts_with_subtypes.erl:23:2: Invalid type specification for function contracts_with_subtypes:extract2/0.
 The success typing is contracts_with_subtypes:extract2
          () -> 'something'
 But the spec is contracts_with_subtypes:extract2
          () -> 'ok'
 The return types do not overlap
contracts_with_subtypes.erl:240:2: The pattern 
          {'ok', 42} can never match the type 
          {'ok', _, string()}
contracts_with_subtypes.erl:241:2: The pattern 
          42 can never match the type 
          {'ok', _, string()}
contracts_with_subtypes.erl:268:18: The call contracts_with_subtypes:flat_ets_new
         (12,
          []) breaks the contract 
          (Name, Options) -> atom()
             when
                 Name :: atom(),
                 Options :: [Option],
                 Option ::
                     'set' | 'ordered_set' | 'bag' | 'duplicate_bag' |
                     'public' | 'protected' | 'private' |
                     'named_table' |
                     {'keypos', integer()} |
                     {'heir', pid(), term()} |
                     {'heir', 'none'} |
                     {'write_concurrency', boolean()} |
                     {'read_concurrency', boolean()} |
                     'compressed'
contracts_with_subtypes.erl:295:22: The call contracts_with_subtypes:factored_ets_new
         (12,
          []) breaks the contract 
          (Name, Options) -> atom()
             when
                 Name :: atom(),
                 Options :: [Option],
                 Option ::
                     Type | Access | 'named_table' |
                     {'keypos', Pos} |
                     {'heir', Pid :: pid(), HeirData} |
                     {'heir', 'none'} |
                     Tweaks,
                 Type :: type(),
                 Access :: access(),
                 Tweaks ::
                     {'write_concurrency', boolean()} |
                     {'read_concurrency', boolean()} |
                     'compressed',
                 Pos :: pos_integer(),
                 HeirData :: term()
contracts_with_subtypes.erl:77:16: The call contracts_with_subtypes:foo1
         (5) breaks the contract 
          (Arg1) -> Res when Arg1 :: atom(), Res :: atom()
contracts_with_subtypes.erl:78:16: The call contracts_with_subtypes:foo2
         (5) breaks the contract 
          (Arg1) -> Res when Arg1 :: Arg2, Arg2 :: atom(), Res :: atom()
contracts_with_subtypes.erl:79:16: The call contracts_with_subtypes:foo3
         (5) breaks the contract 
          (Arg1) -> Res when Arg2 :: atom(), Arg1 :: Arg2, Res :: atom()
contracts_with_subtypes.erl:7:2: Invalid type specification for function contracts_with_subtypes:extract/0.
 The success typing is contracts_with_subtypes:extract
          () -> 'something'
 But the spec is contracts_with_subtypes:extract
          () -> 'ok'
 The return types do not overlap
contracts_with_subtypes.erl:80:16: The call contracts_with_subtypes:foo4
         (5) breaks the contract 
          (Type) -> Type when Type :: atom()
contracts_with_subtypes.erl:81:16: The call contracts_with_subtypes:foo5
         (5) breaks the contract 
          (Type :: atom()) -> Type :: atom()
contracts_with_subtypes.erl:82:16: The call contracts_with_subtypes:foo6
         (5) breaks the contract 
          (Type) -> Type when Type :: atom()
