prop_switch (Fun _ fa) (Fun _ fb) ei
  = test (switch pa pb) ei == expected
  where
    _types = ei :: Either Int Char
    expected = case ei of
      Left i -> fst3 (fa i)
      Right c -> fst3 (fb c)
    pa = predicate fa
    pb = predicate fb
prop_switch (Fun _ fa) (Fun _ fb) ei
  = test (switch pa pb) ei == expected
  where
    _types = ei :: Either Int Char
    expected = case ei of
      Left i -> fst3 (fa i)
      Right c -> fst3 (fb c)
    pa = predicate fa
    pb = predicate fb
prop_switch (Fun _ fa) (Fun _ fb) ei
  = test (switch pa pb) ei == expected
  where
    _types = ei :: Either Int Char
    expected = case ei of
      Left i -> fst3 (fa i)
      Right c -> fst3 (fb c)
    pa = predicate fa
    pb = predicate fb