以下程序与GHC编译:
main :: IO ()
main = print $ 2^2
Run Code Online (Sandbox Code Playgroud)
尽管有签名
(^) :: (Num a, Integral b) => a -> b -> a
Run Code Online (Sandbox Code Playgroud)
(^) :: Ring.C a => a -> Integer -> a
Run Code Online (Sandbox Code Playgroud)
使用Intexponents 非常烦人,所以我更喜欢带有多态指数的Prelude版本.因此,我定义了以下内容:
{-# LANGUAGE NoImplicitPrelude, RebindableSyntax, ScopedTypeVariables #-}
import Algebra.Ring as Ring (C)
import Algebra.ToInteger as ToInteger (C)
import NumericPrelude hiding ((^))
(^) :: forall a i . (Ring.C a, ToInteger.C i) => a -> i -> a
x0 ^ …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数来检查数字是否为素数.我写了这个:
primeCheck :: Int -> Int -> Bool
primeCheck n i
| n == 2 = True
| i == 1 = True
| n `mod` i == 0 = False
| otherwise = primeCheck n (i -1)
isPrime :: Int -> Bool
isPrime n = primeCheck n (floor (sqrt n))
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
使用
floor' Possible fix: add an instance declaration for (RealFrac Int) In the second argument ofprimeCheck'时没有(RealFrac Int)的实例,即isPrime(floor (sqrt n))' In the expression: primeCheck n (floor (sqrt …