我还是一个初学者,当谈到Haskell语法和函数式编程语言,因此当我在看的类型声明Data.Function.on是on :: (b -> b -> c) -> (a -> b) -> a -> a -> c,我的解释是,它有四个参数:(b -> b -> c),(a -> b),a,a,并返回c。但是,当我查看Data.Function.onis的一般使用语法时(*) `on` f = \x y -> f x * f y,它只采用两个函数参数,而不是四个,那么类型签名与使用语法有什么关系呢?
考虑以下两组代码:
random (mkStdGen 1) :: (Int, StdGen)
-- returns (7918028818325808681,545291967 2103410263)
random (mkStdGen 1) :: (Bool, StdGen)
-- returns (True,80028 40692)
random (mkStdGen 949488) :: (Int, StdGen)
-- returns (9159618695640234475,587416689 2103410263)
random (mkStdGen 949488) :: (Bool, StdGen)
-- returns (False,1485632275 40692)
Run Code Online (Sandbox Code Playgroud)
为什么7918028818325808681翻译True但9159618695640234475转换为False?