В Haskell я могу написать класс с объявлением type для создания семейства типов, например:
class ListLike k where
    type Elem ::  * -> *
    fromList :: [Elem k] -> k
И затем напишите такие экземпляры:
instance ListLike [a] where
    type Elem [a] = a
    fromList = id
instance ListLike Bytestring where
    type Elem Bytestring = Char
    fromList = pack
Я знаю, что вы можете создавать типы типов и функции уровня в Idris, но методы работают с данными данного типа, а не с самим типом.
Как я могу создать семейство типов с ограничениями типа в Idris, как указано выше?