В Haskell нам предоставляется возможность комбинировать ограничения по типам с логическим и.Как объединить два типа ограничений с логическим или в Haskell?
Рассмотрим следующий
type And (a :: Constraint) b = (a, b)
или более сложно
class (a, b) => And a b
instance (a, b) => And a b
Я хочу знать, как логически или два ограничения вместе в Haskell.
Моя ближайшая попытка - это, но это не совсем сработает. В этой попытке я повторяю ограничения типов с помощью тегов и разбор их с неявными параметрами.
data ROr a b where
L :: a => ROr a b
R :: b => ROr a b
type Or a b = (?choose :: ROr a b)
y :: Or (a ~ Integer) (Bool ~ Integer) => a
y = case ?choose of
L -> 4
x :: Integer
x = let ?choose = L in y
Это почти работает, но пользователь должен применить заключительную часть, и компилятор должен сделать это для меня. Кроме того, этот случай не позволяет выбрать третий вариант, когда выполняются оба ограничения.
Как я могу логически или два ограничения вместе?
Что относительно Либо? Это позволит вам устранить проблему, когда оба будут удовлетворены. –