Это невозможно, потому что это было бы математически непоследовательным.Проще говоря, такой тип данных был бы слишком большим, чтобы поместиться в набор.(Если это так, можно легко построить инъекцию из блока питания этого типа в себя)
Более подробное объяснение можно найти, например, здесь .
Еслифункции, которые вы хотите сохранить, имеют ограниченный домен (например, конечный или счетный), возможно, можно заставить это работать.Я бы наивно думал, что будет работать конечная карта:
datatype entry = Entry id "(entry list, nat) fmap"
Но, очевидно, это не так.Я не уверен, что это из-за глубокой логической проблемы или просто потому, что fmap
не был настроен должным образом для поддержки этого.Я подозреваю, что это последнее, так как работает следующая похожая вещь:
datatype entry = Entry id "(entry list × nat) fset"
Вам достаточно конечной карты?