gpt4 book ai didi

haskell - 如何在应用类型默认规则的 ghci 中打印多态函数(或值)的类型?

转载 作者:行者123 更新时间:2023-12-02 11:10:15 27 4
gpt4 key购买 nike

当我在 GHCi 中输入 :t 命令时,我看到多态类型:

ghci> :t 42
42 :: Num t => t
ghci> :t div
div :: Integral a => a -> a -> a

但是在我实际评估这些函数之后,我看到了类型默认规则的结果。是否有一些命令或能力可以在 ghci 中观察根据 Haskell 报告和/或 ghc 实现应用类型默认规则后类型将如何更改?

最佳答案

您可以通过打开单态限制然后将其绑定(bind)到新名称来做到这一点:

Prelude> :set -XMonomorphismRestriction 
Prelude> let n = 42
Prelude> :t n
n :: Integer
Prelude> let p = (^)
Prelude> :t p
p :: Integer -> Integer -> Integer
Prelude> let e = (**)
Prelude> :t e
e :: Double -> Double -> Double
Prelude> let d = div
Prelude> :t d
d :: Integer -> Integer -> Integer

如果您不喜欢总是定义新变量,您可以使用以下方法来解决这个问题

Prelude> :def monotype (\e -> return $ ":set -XMonomorphismRestriction\nlet defaulted = "++e++"\n:t defaulted")

(您可能希望将其放入 .ghci 文件中以始终使该命令可用),然后

Prelude> :monotype (^)
defaulted :: Integer -> Integer -> Integer

当然,启用单态限制的隐藏全局副作用非常丑陋,但是哦,好吧......

关于haskell - 如何在应用类型默认规则的 ghci 中打印多态函数(或值)的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46193983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com