Tôi dự kiến mã sau không thành công với lỗi loại do vi phạm minBound và maxBound. Nhưng, như bạn có thể thấy, nó đi qua mà không gắn cờ một lỗi.Làm thế nào để bạn sử dụng kiểu chữ Bounded trong Haskell để xác định loại có phạm vi dấu chấm động?
{-# OPTIONS_GHC -XTypeSynonymInstances #-}
module Main where
type Probability = Float
instance Bounded Probability where
minBound = 0.0
maxBound = 1.0
testout :: Float -> Probability
testout xx = xx + 1.0
main = do
putStrLn $ show $ testout 0.5
putStrLn $ show $ testout (-1.5)
putStrLn $ show $ testout 1.5
Trong Prelude tôi có được điều này
*Main> :type (testout 0.5)
(testout 0.5) :: Probability
Và tại dấu nhắc tôi có được điều này:
[~/test]$runhaskell demo.hs
1.5
-0.5
2.5
Rõ ràng tôi không tuyên bố Bounded đúng cách, và tôi chắc chắn tôi đang làm một cái gì đó sai cú pháp. Không có nhiều công cụ đơn giản trên Google về typeclasses bị ràng buộc, vì vậy mọi trợ giúp sẽ được đánh giá cao.
Rất hữu ích, cảm ơn bạn rất nhiều. Một câu hỏi: bạn đặt một dấu ba chấm ("...") để xác định các cách khác nhau trong đó mkP và mkBC tương tác với các toán tử hiện có trên những thứ của kiểu Num. Tôi cho rằng mục đích của việc này là xác định toán tử số học cho những thứ của kiểu xác suất mà tiếp tục chạy đầu ra thông qua mkP để kiểm tra giới hạn. – ramanujan
@ramanujan, vâng. Về cơ bản chỉ tiếp tục trong mô hình đó. – luqui
Trong trường hợp bạn không biết tìm kiếm phương thức 'Num' ở đâu: http://hackage.haskell.org/packages/archive/base/4.2.0.2/doc/html/Prelude.html#t%3ANum – luqui