ghci randomio类型推断

时间:2016-08-31 13:59:54

标签: haskell ghci

我关注https://en.wikibooks.org/wiki/Haskell/Understanding_monads/StaterandomIO直接在ghci打印一个整数。鉴于它的类型是多态的,ghci如何在这里知道Intghci中是否有一些特殊的类型推断规则?

GHCi> :m System.Random
GHCi> :t randomIO
randomIO :: Random a => IO a
GHCi> randomIO
-1557093684
GHCi> randomIO
1342278538

1 个答案:

答案 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',
}