Во-первых, слишком очевидный ответ заключается в том, что вы можете легко написать «карту типа-> значение», используя Typeable
(часть базовой библиотеки):
import Data.Typeable
import Data.Map
type TypeMap a = Map TypeRep a
insertT :: Typeable k => k -> a -> Map k a -> Map k a
insertT v = insert (typeOf k)
lookupT :: Typeable k => k -> a -> Map k a -> Map k a
lookupT v = lookup (typeOf k)
Теперь вы можете использовать код типа insertT (undefined :: Int) 5
для вставки элементов по типу.
Но, глядя на Fusion, это не похоже на то, что вы могли бы после. Кажется, он позволяет создавать код, работающий с произвольными структурами данных? Это то, что в Хаскеле известно как универсальное программирование "Scrap your Boilerplate". Подробности см. В paper или , но он позволяет вам писать код, который обрабатывает произвольные структуры данных и выбирает значения заданных типов.
Несколько других вещей, которые я видел в Fusion, возможно, можно эмулировать с использованием таких библиотек, как HList или, возможно, fclabels . Но на самом деле действительно трудно сказать больше, не глядя на то, что вам действительно нужно.