Есть в любом случае, даже используя причудливое сочетание расширений GHC, сделать функцию h
как следующий psudeocode:Выберите функцию, основанную на классе
f :: (C1 a) => a -> Int
g :: (C2 a) => a -> Int
h x =
if (isOfClass C1 x) then (f x)
else if (isOfClass C2 x) then (g x)
else COMPILE_ERROR
Обратите внимание, что если x
является оба класса C1
и C2
я не Не возражаете, если я получаю противоречивое поведение в зависимости от того, что в сфере видимости.
У вас есть случай использования? – Koterpillar