例如,一种不好的方法是通过字符串分解:
toReadableNum :: (Num a, Num b, Read b) => a -> b
toReadableNum = read . show
如果没有好的方法,还有其他不好的方法吗?具体实现?需要语言扩展?
最佳答案
你不能(理智地)离开 Num
至Num
,因为 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/