我关注https://en.wikibooks.org/wiki/Haskell/Understanding_monads/State,randomIO
直接在ghci
打印一个整数。鉴于它的类型是多态的,ghci
如何在这里知道Int
? ghci
中是否有一些特殊的类型推断规则?
GHCi> :m System.Random
GHCi> :t randomIO
randomIO :: Random a => IO a
GHCi> randomIO
-1557093684
GHCi> randomIO
1342278538
答案 0 :(得分:0)
我想这很简单Monomorphism restriction。如果未指定实际类型,则Integer
等多态类型的处理方式与ghci
类似。可能此规则也适用于Random
,您可以看到整数类型而不是某些未知类型变量。
UPD 1:实际上是本部分用户指南中有关defaulting rules的真实答案。
UPD 2 :default (Integer, Double)
类型的案例变得比我预期的更难。因此,在这种情况下,由于报告中所述的Prelude System.Random> default ()
Prelude System.Random> randomIO
<interactive>:6:1:
No instance for (Show (IO a0)) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it
Prelude System.Random> default (Integer)
Prelude System.Random> randomIO
-7948113563809442883
Prelude System.Random> default (Double)
Prelude System.Random> randomIO
0.41581766590151104
声明,默认规则得到解决。考虑下一个ghci会话
problematicStyle: {
borderRadius: 5,
borderWidth: 1,
borderColor: 'red',
justifyContent: 'center',
alignItems: 'center',
}