Diciamo che ho due types:È possibile confrontare due tipi, se uno è assegnabile dall'altro?
t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |]
t2 <- [t| (Int -> Char) -> [Int] -> [Char] |]
è possibile determinare in Template Haskell che un'espressione di t1
può anche essere di t2
? (Senza attuazione tipo unificazione me stesso.)
Se è possibile, dovresti utilizzare il nuovo modello di haskell del modello digitato, ma non ne so nulla. Probabilmente potresti fare una sorta di asserzione in fase di compilazione generando un codice morto come: 'a = (undefined :: (Functor f) => (a -> b) -> f a -> f b); b :: (Int -> Char) -> [Int] -> [Char]; b = a' – jberryman