2014-07-09 32 views
16

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.)

+0

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

Trả lời

-4

Vâng, Bạn có thể định kiểu tất cả các biến khác để lớp trừu tượng nhất đang được sử dụng

1

Như jberryman nói trong các ý kiến, bạn có thể tạo ra mã mà sẽ buộc các typechecker để thống nhất hai loại. Tuy nhiên, bạn không thể latch vào typechecker để thực sự kiểm tra xem bản thân và chi nhánh của bạn trên kết quả. Bạn chỉ đơn giản là không có quyền truy cập thích hợp vào môi trường gõ đầy đủ ở giai đoạn mở rộng TH.

Các vấn đề liên quan