2011-11-01 53 views
28

Có thể truyền Integer đến Int không? Một hướng khác là có thể: toInteger. Tôi biết rằng Integer có thể lưu trữ các giá trị lớn hơn, nhưng đôi khi một cuộc hội thoại là cần thiết để sử dụng các hàm std-lib. Tôi đã thử (n :: Int) và các mẫu mã khác tôi tìm thấy - nhưng không có gì hoạt động.Haskell Chuyển đổi số nguyên thành Int?

takeN :: Integer -> [a] -> [a] 
takeN n l = take n l 

Trả lời

33

Sử dụng fromIntegral.

takeN :: Integer -> [a] -> [a] 
takeN n l = take (fromIntegral n) l 

Lưu ý rằng fromIntegral :: (Integral a, Num b) => a -> b, vì vậy đôi khi bạn sẽ cần thêm một loại chú thích (ví dụ (fromIntegral n :: Int)), nhưng thông thường các trình biên dịch có thể suy ra mà gõ mà bạn muốn.

Trong trường hợp đặc biệt trong ví dụ của bạn, trong Data.ListgenericTake :: (Integral i) => i -> [a] -> [a], thực hiện tương tự như take nhưng có loại chung hơn.

13

cũng có fromInteger (fromIntegral chỉ là fromInteger . toInteger, nhưng kể từ khi bạn có một Integer anyway vì vậy bạn có thể bỏ qua phần thứ hai)

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