Sé que TypeSynomymInstances only allows fully applied type synonyms to be used in instance heads, pero parece que sería útil si pudiera usar sinónimos de tipo aplicados parcialmente para ser utilizados también.¿Por qué TypeSynonymInstances no permite utilizar sinónimos de tipo aplicado parcialmente en los cabezales de instancia?
Por ejemplo:
class Example e where
thingy :: a -> b -> e a b
-- legit, but awkward
newtype FuncWrapper e a b = FuncWrapper { ap :: a -> e a b }
instance (Example e) => Example (FuncWrapper e) where
thingy _ = FuncWrapper . flip thingy
funcWrapperUse :: (Example e) => e Int String
funcWrapperUse = thingy 1 "two" `ap` 3 `ap` 4 `ap` 5
-- not legal, but a little easier to use
type FuncSynonym e a b = a -> e a b
instance (Example e) => Example (FuncSynonym e) where
thingy _ = flip thingy
funcSynonymUse :: (Example e) => e Int String
funcSynonymUse = thingy 1 "two" 3 4 5
¿Intentó '-XTypeSynonymInstances' para ejecutar su segunda versión (como lo sugiere GHC)? – Landei
@Landel: no le gusta el hecho de que 'FuncSynonym e' no se aplique por completo. Por lo tanto, mi pregunta. – rampion
Este es (relacionado con) ticket [785] (http://ghc.haskell.org/trac/ghc/ticket/785), que está marcado como 'wontfix'. –