Tôi có một cái gì đó như sau:bảo lãnh mà các gia đình loại sẽ lấy được lớp nhất định
{-# LANGUAGE TypeFamilies #-}
class Configuration c where
data Pig c
data Cow c
parsePig :: GenParser Char st (Pig c)
parseCow :: GenParser Char st (Cow c)
data Farm c =
{ pigs :: [Pig c]
, cows :: [Cow c]
} deriving Show
này không thành công vì dòng deriving Show
. Tôi không biết cách ép buộc tất cả các trường hợp Configuration
để đảm bảo rằng các triển khai data Pig
và data Cow
của chúng tôi là tất cả các trường hợp của Show
.
Tôi biết tôi có thể làm cho nó có phương pháp showPig
và showCow
và viết toàn bộ trường hợp phức tạp show
, nhưng trong thực tế mọi thứ phức tạp hơn điều này và điều đó sẽ là một nỗi đau.
Có cách nào dễ dàng, thanh lịch để đảm bảo rằng các thể loại gia đình kiểu đó là bản thân các trường hợp của các lớp nhất định không?
Nó không thất bại vì dòng 'LANGAUGE'? –
Đó không phải là toàn bộ tệp; Tôi đã bỏ nó xuống cho các mục đích của câu hỏi này. Rõ ràng là có một khai báo mô-đun, một nhập khẩu ParserCombinators.Parsec, v.v. – So8res
Tôi nghĩ rằng Matt có nghĩa là thực tế là dòng ghi 'LANGAUGE' trong khi nó phải là' LANGUAGE'. –