В 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, как указано выше?