Wiem, że TypeSynomymInstances only allows fully applied type synonyms to be used in instance heads, ale wydaje się, że byłby przydatny, gdybym mógł użyć również synonimy używane do stosowania paritally.Dlaczego TypeSynonymInstances nie zezwala na stosowanie częściowo używanych synonimów w nagłówkach instancji?
na przykład:
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
Czy wypróbowałeś '-XTypeSynonymInstances', aby uruchomić drugą wersję (zgodnie z sugestią GHC)? – Landei
@Landel: Nie podoba mi się, że 'FuncSynonym e' nie jest w pełni zastosowany. Tak więc moje pytanie. – rampion
To jest (związane z) bilet [785] (http://ghc.haskell.org/trac/ghc/ticket/785), który jest oznaczony jako 'wontfix'. –