a -> String showSquare x = "The square of " ++-6ren">
gpt4 book ai didi

haskell - Haskell 中的 "enable_if"

转载 作者:行者123 更新时间:2023-12-04 13:28:17 25 4
gpt4 key购买 nike

如何在 Haskell 中编写如下内容:

showSquare :: (Show a, Num a) => a -> String
showSquare x = "The square of " ++ (show x) ++ " is " ++ (show (x * x))

showSquare :: (Show a, not Num a) => a -> String
showSquare x = "I don't know how to square " ++ (show x)

基本上,像 boost::enable_if在 C++ 中。

GHC 扩展没问题。

最佳答案

你为什么要这个?类型检查器确保您永远不会调用 showSquare在不是 Num 的东西上在第一种情况下。 There is no instanceof in Haskell ,因为所有内容都是静态输入的。

它不适用于任意类型:您只能定义自己的 type class ,例如

class Mine a where
foo :: a -> String

instance (Num a) => Mine a where
foo x = show x*x

你可以为其他类添加更多实例,但你不能只写 instance Mine a对于任意 a .一个额外的 instance (Show a) => ...也无济于事,因为 overlapping instances也不允许(该链接描述了一种解决方法,但它需要相当多的额外机器)。

关于haskell - Haskell 中的 "enable_if",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11896361/

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