wl.*_*wl. 6 haskell numbers typeclass
例如,一种不好的方法是通过一个字符串:
toReadableNum :: (Num a, Num b, Read b) => a -> b
toReadableNum = read . show
Run Code Online (Sandbox Code Playgroud)
如果没有好方法,还有其他不好的方法吗?具体实施?需要语言扩展?
你不能(理智地)Num去Num,因为Num没有提供任何机制来提取除了它的虚假Eq和Show机器之外的其他值,但是如果你愿意代表你的数字更多地假设你来自,然后你可以追索.
特别是
fromIntegral :: (Integral a, Num b) => a -> b
Run Code Online (Sandbox Code Playgroud)
和的组成
toRational :: Real a => a -> Rational
Run Code Online (Sandbox Code Playgroud)
同
fromRational :: Fractional a => Rational -> a
Run Code Online (Sandbox Code Playgroud)
如果不是你所要求的,那么你们都可以做你们的意思.
虽然read . show打字很好并且有你提出的签名,但意思是gobbledigook.没有什么可以说一个Show实例发出的文本将与一个完全不同的Read实例兼容,并且有很多反例.
(隐含)合同Read,Show仅在您使用相同类型时才适用!
没有好办法.有些数字包含更多其他信息,所以你怎么能期望以一种好的方式在两个任意数字之间进行转换.一些简单的例子:如何将Double转换为Int?对Int8有理由吗?浮动的复杂双重?
所有这些都涉及信息丢失,然后没有明显的正确方法.
正如@hammar所说,这些操作Num根本不允许你构建这样的函数.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |