haskell - 在 Haskell 中,有没有写 num to num 转换函数 `toNum::(Num a, Num b) => a -> b` 的好方法?

标签 haskell numbers typeclass

例如,一种不好的方法是通过字符串分解:

toReadableNum :: (Num a, Num b, Read b) => a -> b
toReadableNum = read . show

如果没有好的方法,还有其他不好的方法吗?具体实现?需要语言扩展?

最佳答案

你不能(理智地)离开 NumNum ,因为 Num 除了其虚假的 Eq 和 Show 机制之外,没有提供任何机制来提取有关持有的值(value)的信息,但是如果您愿意代表您来自的数字假设更多,那么您可以有追索权。

尤其是

fromIntegral :: (Integral a, Num b) => a -> b

和组成
toRational :: Real a => a -> Rational


fromRational :: Fractional a => Rational -> a

如果不完全符合您的要求,那么两者都是执行您的意思的好人选。

read . show打字很好,有你提议的签名,意思是 gobbledigook。没有任何内容可以说明 Show 发出的文本。实例将与完全不同的 Read 兼容例如,还有很多反例。
Read 上的(隐含)合约和 Show仅当您使用相同类型时才适用!

关于haskell - 在 Haskell 中,有没有写 num to num 转换函数 `toNum::(Num a, Num b) => a -> b` 的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6798808/

相关文章:

java - 我如何向 int 添加一个重要的 0?

c# - 我如何总结每 5 个数字而不是所有数字?

haskell - 如何在 Haskell 中声明抽象数据容器类型?

arrays - Haskell:有没有比 MArray 更通用的键/值存储类?

linux - Sort numbers values - separated by a dot or any other separator character - 在 RHEL5 中排序版本值

haskell - 如何在这个不寻常的设置中使用 Dzen 而不是 Xmobar

haskell - RankNTypes : apply the same function to pairs of different types

haskell - 当第一个参数使用flip时理解map函数

haskell - 在 newtype 中实现 >>=

haskell - 为什么限制数据是一件坏事?