为什么我无法设置$number = $_POST["NR"];
$i = 0;
while ($i < 40) {
$picture = $number + $i.".jpg";
echo '<img src="pictures/' . $picture . ' ">';
$i++;
}
约束,但String
工作正常?
这有效:
Num
这不是:
ltest' :: (Num a) => a -> a
ltest' a = (\b -> b * 2) a
错误:
test' :: (String a) => a -> a
test' a = a ++ " good job"
答案 0 :(得分:12)
String
是一种类型:
type String = [Char]
Num
是一个类:
class Num a where
(+), (-), (*) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
negate x = 0 - x
约束只涉及类,而不是类型。
您的ltest'
有一个类型参数a
。 1 这可以明确表达:
ltest' :: forall a. (Num a) => a -> a
这意味着它适用于具有a
类实例的任何类型Num
。
您的test'
不需要类型参数,因为它只适用于一种类型 2 (参数只能是String
类型)。所以它也不需要任何约束,因为没有要约束的类型参数。
test' :: String -> String
test' a = a ++ " good job"
1 换句话说,ltest'
具有多态类型。
2 换句话说,test'
具有单态类型。