Типы элементов контейнера

В некотором смысле это шаг назад по сравнению с моим предыдущим вопросом, но... Может кто-нибудь напомнить мне, почему это не работает?

class Container c e where
  empty :: c
  insert :: e -> c -> c

instance Container [x] x where
  empty = []
  insert = (:)

instance Container ByteString Word8 where
  empty = BIN.empty
  insert = BIN.cons

instance Ord x => Container (Set x) x where
  empty = SET.empty
  insert = SET.insert

Очевидно, если бы это было так просто, никто бы не стал изобретать функциональные зависимости и ассоциированные типы. Так в чем же проблема?

7
задан MathematicalOrchid 31 January 2012 в 10:42
поделиться