Type casting in haskell, Fractional and Int -
i've written function (should) takes infinite list of booleans , calculate ratio of true false values on first n elements:
prob n list = foldr (+) 0 (map booltoint (take n list)) / n booltoint b | b == true = 1 | otherwise = 0
unfortunately that's not working:
no instance (fractional int) arising use of `/' possible fix: add instance declaration (fractional int) in expression: foldr (+) 0 (map booltoint (take n list)) / n in equation `prob': prob n list = foldr (+) 0 (map booltoint (take n list)) / n booltoint b | b == true = 1 | otherwise = 0 failed, modules loaded: none.
i tried make conversion, isn't working either:
prob n list = foldr (+) 0 (map booltoint (take (fromintegral (tointeger n)) list)) / n booltoint b | b == true = 1 | otherwise = 0
it's compiling, try call function error:
*main> prob 50 tocoin1 <interactive>:1:6: ambiguous type variable `a0' in constraints: (num a0) arising literal `50' @ <interactive>:1:6-7 (integral a0) arising use of `prob' @ <interactive>:1:1-4 (fractional a0) arising use of `prob' @ <interactive>:1:1-4 probable fix: add type signature fixes these type variable(s) in first argument of `prob', namely `50' in expression: prob 50 tocoin1 in equation `it': = prob 50 tocoin1
any suggestions?
you're converting @ wrong place. try sticking fromrational
around entire foldr
, n
.
prob n list = fromintegral count / fromintegral n count = foldr (+) 0 (map booltoint (take n list)) booltoint b | b == true = 1 | otherwise = 0
oh, , booltoint
function identical fromenum
specialized bool
s.
prob n list = fromintegral count / fromintegral n count = foldr (+) 0 (map fromenum (take n list))
the fundamental problem tried imposed conflicting requirements on first argument prob
. use of tointeger
constrained n
integral
, use in /
required fractional
, , there's no type that's both integral
, fractional
.
Comments
Post a Comment