Символическое `show` для` SInt16`
Я ищу способ превратить SInt16
в SString
. Для моего случая использования достаточно того, что он делает правильные вещи для конкретных значений, т.е. я буду смотреть только наSString
результат для бетона SInt16
с.
Я заметил, что есть Show
пример для SInt16
, который (конечно) возвращает String
. Его почти достаточно для моих нужд: для символьных значений он возвращает"<symbolic> :: SInt16"
и для конкретных значений, например 42, он возвращает "42 :: SInt16"
. Итак, если бы не этот надоедливый тег типа, я мог бы использоватьliteral . show @SInt16
Как мой SInt16 -> SString
функция.
Есть ли лучший способ, чем редактировать возвращаемое значение show
вырезать тег типа?
1 ответ
Решение
Что-то вроде этого должно помочь:
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