2015-09-25 15 views
5

Vì vậy, tôi thực sự mới với Haskell, nhưng tôi đã chơi xung quanh với ký hiệu miễn phí điểm và gặp phải vấn đề này. Tôi đang ở trong bảng điều khiển:Loại biên dịch không có điểm Haskell

> let c = (.)negate 
> :t c 
> (a -> Integer) -> a -> Integer -> a 

nhưng phủ nhận có một số, vậy tại sao nó bị ràng buộc với kiểu Integer?

Trả lời

7

Đây là trường hợp khác của các quy tắc mặc định mở rộng trong GHCi. Làm :set -XNoMonomorphismRestriction hoặc chỉ cần

> :set +m -- multiline input in GHCi 
> let c :: (Num a) => (b -> a) -> b -> a -> b 
|  c = (.) negate 
| 
> :t c 
Num a => (b -> a) -> b -> a -> b 
+2

Chỉ cần lưu ý, bạn không cần nhập nhiều dòng; bạn có thể viết 'let x :: T; x = t'. – user2407038

+0

@ user2407038 Bạn không cần nó, và bạn cũng có thể sử dụng ': {' và ':}', nhưng tôi thích ': set + m', nó giống như cách mà IPython thực hiện nhập nhiều dòng. – bheklilr

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