GHC Numeric库readBin函数未被GHCI识别,readOct/readHex可正常使用
问题原因
Haskell的Numeric模块并未提供readBin函数,该模块仅内置了readOct(八进制解析)和readHex(十六进制解析)函数,这是标准库的设计选择。
替代方案
可以利用Numeric模块中的readInt函数自行实现readBin,readInt是通用的进制解析工具,支持自定义基数:
import Numeric (readInt) import Data.Char (digitToInt) -- 实现二进制字符串转数值的readBin函数 readBin :: (Eq a, Num a) => ReadS a readBin = readInt 2 -- 指定基数为2 (\c -> c `elem` "01") -- 验证字符是否为二进制位 digitToInt -- 将字符转换为对应数字
测试示例
在GHCI中调用该函数:
Prelude Numeric Data.Char> readBin "1101" [(13,"")] Prelude Numeric Data.Char> readBin "10000000" [(128,"")]
内容的提问来源于stack exchange,提问作者Taimoor Zaeem
相关产品推荐
相关产品推荐

