У меня есть тип Foo a
и хочу тип EnumFoo a
который требует instance Enum (Foo a)
. Как вы объявляете этот тип?Предпосылки для типов?
Допустим, мы объявляем Foo
как это:
type Foo a = Maybe a
Там может быть Foo Int
, Foo String
и ничего.
Теперь я объявляю экземпляр Enum
на Foo Int
:
instance Enum (Foo Int) where
...
Там могут быть некоторые другие Foo
, что есть экземпляр Enum
, как это. Назовем эти типы EnumFoo a
. Как вы это выражаете?
Это не работает, но то, что я хотел бы сделать:
type (Enum (Foo a)) => EnumFoo a = Foo a
Я не уверен, что это называется, так что название не должно делать никакого смысла.
Это почти разумно, но не совсем. Можете ли вы попытаться объяснить немного больше, что вам нужно? Если вы можете дать немного контекста, это очень поможет. – dfeuer
@dfeuer Я просто добавил еще несколько. Имеет ли это смысл? –
Я вижу две интерпретации: (a) 'EnumFoo' пытается захватить коллекцию типов, которые являются« Foo a »такими, что есть экземпляр« Enum (Foo a) ». Или (b) 'EnumFoo a' - это« функция типа », которая разрешает« Foo a »всякий раз, когда есть экземпляр« Enum (Foo a) ». Являются ли они такими близкими? Что-то другое? – luqui