Tôi đang cố gắng mô hình hóa một số dữ liệu kiểu đa hình trong haskell. Tôi hiểu tại sao mã sau không hoạt động, nhưng tôi hy vọng nó minh họa những gì tôi đang cố gắng làm. Câu hỏi của tôi là: một cách thành ngữ để mô hình hóa điều này với Haskell là gì? (Bạn không cần phải giữ định dạng đầu vào giống nhau nếu có cách nào tốt hơn - Tôi không có bất kỳ mã hoặc dữ liệu hiện có nào.)Làm thế nào để mô hình hóa một danh sách đa hình trong Haskell?
data Running = Sprint | Jog deriving (Show)
data Lifting = Barbell | Dumbbell deriving (Show)
data Time = Time Integer deriving (Show)
data Pounds = Pounds Integer deriving (Show)
data TimedActivity = TimedActivity Running Time deriving (Show)
data WeightedActivity = WeightedActivity Lifting Pounds deriving (Show)
class Activity a
instance Activity TimedActivity
instance Activity WeightedActivity
-- I have a list of activities
main :: IO()
main = putStrLn $ show [ TimedActivity Sprint (Time 10)
, WeightedActivity Barbell (Pounds 100)
]
-- I then want to apply functions to generate summaries and
-- reports from those activities, i.e.:
extractLifts :: (Activity x) => [x] -> [WeightedActivity]
extractTimes :: (Activity x) => [x] -> [TimedActivity]
Lý do đầu tiên tại sao nó không hoạt động là vì bạn đang thiếu một vài 'ở cuối' hoạt động lớp a' và cả hai 'instance Activity' dòng. Nhưng tôi đang làm việc trên một câu trả lời thực sự ngay bây giờ. – bheklilr