在GHCi里面查到的函数类型:
split :: RandomGen g => g -> (g, g)
randoms :: (RandomGen g, Random a) => g -> [a]
(randoms.split):: (RandomGen g, RandomGen (g, g), Random a) => g -> [a]
这里g是RandomGen类型,(g, g)也是RandomGen类型?
这个我还能一知半解,只是期待高人详解一下RandomGen。但是跟Control.Arrow (first)组合起来:
(first randoms) :: (RandomGen g, Random a) => (g, d) -> ([a], d)
(first randoms . split) :: (RandomGen g, Random a) => g -> ([a], g)
既然randoms和 randoms . split的类型都是 g -> [a],那么前面加个first,应该都是 (g, d) -> ([a], d)啊,为什么(first randoms . split)类型居然是 g -> ([a], g)?