MMa*_*ail 2 haskell bounded-types
以下 Haskell 代码无法编译:
\n\ngetMaxBound :: (Bounded a) => a -> a\ngetMaxBound _ = maxBound :: a\nRun Code Online (Sandbox Code Playgroud)\n\n我得到的错误如下:
\n\nCould not deduce (Bounded a1) arising from a use of \xe2\x80\x98maxBound\xe2\x80\x99\n from the context: Bounded a\n bound by the type signature for:\n getMaxBound :: Bounded a => a -> a\n at rot13.hs:3:1-36\nRun Code Online (Sandbox Code Playgroud)\n\n为什么我无法在 Haskell 中获取有界类型的 maxBound?
\n\n理想情况下,我会像这样使用这个函数:
\n\ngetMaxBound 3\n> 9223372036854775807\n\ngetMaxBound 'c'\n> '\\1114111'\nRun Code Online (Sandbox Code Playgroud)\n\n我觉得每次我有任何a具有 Bounded 实例的类型时,我应该能够获得该类型的 maxBound。
我缺少什么?
\n威廉的答案在这种情况下应该可以正常工作,但是在更复杂的情况下也可能有用的另一种选择是使用-XScopedTypeVariables
如果您将该行添加{-# LANGUAGE ScopedTypeVariables #-}到文件顶部,您的代码应该可以编译。
该扩展的作用是允许您在内部作用域中引用外部作用域的类型变量。在你的代码中,a在函数体中被隐藏,并且它和外部之间没有连接a,导致你丢失Bounded a上下文!