Hãy nói rằng tôi có hai types:Có thể so sánh hai loại, nếu một loại có thể gán cho loại kia không?
t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |]
t2 <- [t| (Int -> Char) -> [Int] -> [Char] |]
Có thể để xác định trong mẫu Haskell rằng một biểu hiện của t1
cũng có thể là của t2
? (Nếu không thực hiện loại thống nhất bản thân mình.)
Nếu có thể bạn sẽ phải sử dụng các mẫu đã nhập mẫu mới, nhưng tôi không biết gì về điều đó. Bạn có lẽ có thể tạo ra một loại xác nhận thời gian biên dịch bằng cách tạo ra một số mã chết như: 'a = (undefined :: (Functor f) => (a -> b) -> f a -> f b); b :: (Int -> Char) -> [Int] -> [Char]; b = a' – jberryman