Đọc cuốn sách Real world Haskell
geting dưới đây ví dụ về trường hợp chồng chéotrường hợp chồng chéo trong Haskell
instance (JSON a) => JSON [a] where
toJValue = undefined
fromJValue = undefined
instance (JSON a) => JSON [(String, a)] where
toJValue = undefined
fromJValue = undefined
ghci> toJValue [("foo","bar")]
<interactive>:1:0:
Overlapping instances for JSON [([Char], [Char])]
arising from a use of `toJValue' at <interactive>:1:0-23
Matching instances:
instance (JSON a) => JSON [a]
-- Defined at BrokenClass.hs:(44,0)-(46,25)
instance (JSON a) => JSON [(String, a)]
-- Defined at BrokenClass.hs:(50,0)-(52,25)
In the expression: toJValue [("foo", "bar")]
In the definition of `it': it = toJValue [("foo", "bar")]
Bằng hiểu biết của tôi điều này sẽ không thể là một chồng chéo, như [a] không phải là một sự lựa chọn, vì Việc hạn chế JSON [a] là 'a' phải là một cá thể của JSON. Không có thể hiện của JSON cho (String, a).
cảm ơn lời giải thích rất chi tiết –
Nhân tiện: một chút sau đó trên cuốn sách chỉ ra rằng bạn có thể sử dụng "chồng chéo" để giải quyết "vấn đề" được mô tả trong câu trả lời này. Cá nhân, tôi không hiểu tại sao nó là như vậy .. hy vọng tôi sẽ grok nó một ngày. – Brendan