如何将`Show a`转换为`Text`?

时间:2018-05-29 18:23:56

标签: string haskell

Show a可以转换为String show。是否可以直接从Show a转换为Text而无需经过String

我了解到最佳做法是尽可能避免String。但是Show a类型类似乎很常见,String对我来说太难以避免了?

还有一个类型类,类似于TextShow,这样派生自TextShow会自动获得textShow :: TextShow a => a -> Text吗?

1 个答案:

答案 0 :(得分:2)

String是一个类型为android.os.Handler的函数,这意味着程序可以构造任何生成Text的函数。我们不能自动(使用编译器)“专门化”所有函数,以便它立即返回showText,尽管Haskell编译器可以进行一些优化。

然而,我们可以构建我们自己的import Data.Text(Text, pack) showText :: Show a => a -> Text showText = pack . show 函数:

Show

这适用于所有pack类型,因此Text可用于ShowText

然而,有时候程序员可能优化 Text(例如返回pack常量通常比使用Show更好。我们可以使用{-# LANGUAGE DefaultSignatures #-} import Data.Text(Text, pack) class ShowText a where showText :: a -> Text default showText :: Show a => a -> Text showText = pack . show 的默认实现来定义类型类:

ShowText

因此,如果我们创建一个Show的实例并且类型是DATEONLY类型,那么如果我们实现一个特定的函数,那么将使用该函数,如果我们不这样做,那么将使用默认的“后备”实现。