за

аюсь закодировать список элементов, типы которых ограничены экземплярами некоторого класса типов:

{-# LANGUAGE RankNTypes, TypeSynonymInstances, LiberalTypeSynonyms #-}
module Test where

class Someable a where
  some :: a -> String

data Some = Some String

type SomeGroup = forall a. Someable a => [a]

instance Someable Some where
  some (Some v) = v

instance Someable SomeGroup where
  some (x:xs) = (some x) ++ ", " ++ (some xs)

main = do
  putStrLn $ show.some [Some "A", [Some "B", Some "C"]]

Но компиляция завершается с ошибкой:

Test.hs:14:10:
    Illegal polymorphic or qualified type: SomeGroup
    In the instance declaration for `Someable SomeGroup'

Кажется, я даже не смог определить экземпляр для типа синонимов ...

Я в курсегетерогенные коллекции Вики-статья, но я хочу знать, почему именно мой подход не работает - мне кажется естественным определять тип, ограничивая коллекцию только элементами с типами, которые являются экземплярами некоторого класса типов.

Ответы на вопрос(2)

Ваш ответ на вопрос