我的代码如下:
calcstep ::Integral a => a -> a
calcstep n = calcstep2 n 0
calcstep2 :: Integral (Integral a, Integral b) => a -> b -> a
calcstep2 1 k = k
calcstep2 n k | odd n = calcstep2 (n/2) (k+1)
| otherwise = calcstep2 (n*3+1) (k+1)
错误如下:
非类型变量参数
约束中的:积分(积分a,积分b)
(使用-XFlexibleContexts允许此操作)
在`calcstep2'的类型签名中: calcstep2 :: Integral(积分a,积分b)=> a - > b - >一个
失败,模块加载:无。
这是什么意思?我该如何解决?
答案 0 :(得分:12)
在ghci
中,您可以像这样设置FlexibleContexts
:
:set -XFlexibleContexts
在源文件的开头,您应该使用:
{-# LANGUAGE FlexibleContexts #-}
在GHC手册中,您可以找到有关using language extensions的更多信息。
无论如何,我认为克里斯的回答更接近你真正想要的。
答案 1 :(得分:12)
上下文Integral (Integral a, Integral b)
可能不是你想要的。您希望{/ 1}}更像是
(Integral a, Integral b)