Sagen wir, ich habe zwei types:Ist es möglich, zwei Arten zu vergleichen, wenn einer von den anderen zuweisbar ist?
t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |]
t2 <- [t| (Int -> Char) -> [Int] -> [Char] |]
Ist es möglich, in Template Haskell, um festzustellen, dass ein Ausdruck von t1
auch von t2
sein kann? (Ohne Typ Vereinheitlichung der Umsetzung selbst.)
Wenn es möglich ist, müssten Sie das neue typisierte Vorlage Haskell Zeug verwenden, aber ich weiß nichts darüber. Sie könnten wahrscheinlich eine Art Kompilierungszeit-Assertion machen, indem Sie einen toten Code wie folgt erzeugen: 'a = (undefined :: (Functor f) => (a -> b) -> f a -> f b); b :: (Int -> Char) -> [Int] -> [Char]; b = a' – jberryman