Ограничение типа Haskell «not»

Я пытаюсь индуктивно определить пару экземпляров класса. То есть:

class Foo a b | a -> b where
  foo :: a -> b

instance (not?)Foo a => Bar a b
  foo x = ...

instance Foo a => Bar a b
  foo x = ...

Первый экземпляр определяет базовое действие, а второй рекурсивно вызывает foo. Есть какой-либо способ сделать это? Хорошим примером может быть выравнивание списка, где в первом случае это функция идентификации, а во втором — рекурсивное применение concat.

7
задан Jonathan 3 March 2012 в 23:47
поделиться