Tôi biết rằng TypeSynomymInstances only allows fully applied type synonyms to be used in instance heads, nhưng có vẻ như sẽ thuận tiện nếu tôi có thể sử dụng các từ đồng nghĩa loại được áp dụng theo cách được sử dụng.Tại sao TypeSynonymInstances không cho phép sử dụng các từ đồng nghĩa loại được áp dụng một phần trong các đầu ví dụ?
Ví dụ:
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
Bạn đã thử '-XTypeSynonymInstances' để chạy phiên bản thứ hai (như GHC đề xuất)? – Landei
@Landel: Nó không thích thực tế là 'FuncSynonym e' không được áp dụng đầy đủ. Vì vậy, câu hỏi của tôi. – rampion
Đây là (liên quan đến) vé [785] (http://ghc.haskell.org/trac/ghc/ticket/785), được đánh dấu là 'wontfix'. –