`SInt16` 的符号 `show`
Symbolic `show` for `SInt16`
我正在寻找将 SInt16
变成 SString
的方法。对于我的用例,它对具体值做正确的事情就足够了,即我只会查看具体 SInt16
的 SString
结果。
我注意到 SInt16
有一个 Show
实例,(当然)return 是 String
。它几乎足以满足我的需求:对于符号值,它 returns "<symbolic> :: SInt16"
和具体值,例如42、它returns"42 :: SInt16"
。因此,如果不是那个讨厌的类型标签,我可以使用 literal . show @SInt16
作为我的 SInt16 -> SString
函数。
有没有比编辑 show
的 return 值更好的方法来删除类型标签?
像这样应该可以解决问题:
import Data.SBV
import Data.SBV.String
toString :: (SymVal a, Show a) => SBV a -> SString
toString = literal . maybe "<symbolic>" show . unliteral
我得到:
*Main> toString (2 :: SInt16)
"2" :: SString
*Main> toString (uninterpret "n" :: SInt16)
"<symbolic>" :: SString
我正在寻找将 SInt16
变成 SString
的方法。对于我的用例,它对具体值做正确的事情就足够了,即我只会查看具体 SInt16
的 SString
结果。
我注意到 SInt16
有一个 Show
实例,(当然)return 是 String
。它几乎足以满足我的需求:对于符号值,它 returns "<symbolic> :: SInt16"
和具体值,例如42、它returns"42 :: SInt16"
。因此,如果不是那个讨厌的类型标签,我可以使用 literal . show @SInt16
作为我的 SInt16 -> SString
函数。
有没有比编辑 show
的 return 值更好的方法来删除类型标签?
像这样应该可以解决问题:
import Data.SBV
import Data.SBV.String
toString :: (SymVal a, Show a) => SBV a -> SString
toString = literal . maybe "<symbolic>" show . unliteral
我得到:
*Main> toString (2 :: SInt16)
"2" :: SString
*Main> toString (uninterpret "n" :: SInt16)
"<symbolic>" :: SString