誰もがShow
を知っています。しかし、何について:Data.TextのShow typeclassに相当するものはありますか?
class ShowText a where
showText :: a -> Text
私はこれを見つけることができません。どうして?
誰もがShow
を知っています。しかし、何について:Data.TextのShow typeclassに相当するものはありますか?
class ShowText a where
showText :: a -> Text
私はこれを見つけることができません。どうして?
ライブラリtext-showが現在存在し、この問題を正確に解決しています。
アップデート(2016年2月12日)
basic-preludeライブラリで提供show
機能はまた、直テキストをレンダリングする:
show :: Show a => a -> Text
basic-prelude
もtext-show
より少ない依存性を有します。あなたがbasic-prelude
使用したい場合は、ソースファイルの先頭に次を追加することによって、自分自身のコンパイル頭痛を保存します。
{-# LANGUAGE NoImplicitPrelude #-}
基本プレリュードとクラシックプレリュードの両方に[tshow](https://www.stackage.org/lts-8.23/hoogle?q=tshow) – mb21
それはShow
をオフに便乗独自の関数を書くこと些細です:
showText :: Show a => a -> Text
showText = pack . show
これはパフォーマンスに影響しますか?つまり、 'Text'を直接作成するのではなく、大きな' String'を作成して 'Text'に変換するのではないのですか? – jameshfisher
このようにData.Textを使用することの利点をすべて失っていませんか?主に 'String'のprefromanceの問題のためにTextを使用します - そして、この方法ですべての利益を捨てます... – Sventimir
' Show' typeclassは基本的に 'show :: a - > String'だけを必要とするので、方法はありませんStringを通さずに 'showText'を実装します。基本的で上品なプレリュードの 'tshow'機能もこのように実装されています。 – mb21
直接テキストを作成すると、問題は、あなたがまだそれを充填する前に、厳密なテキストブロック全体のサイズを知っておく必要がありますあなたができることです。 Builderスキームを使い、Data.Text.Lazyを使用する方がよいでしょう。 Dan Doelはbytestring-showでこれを行いますが、私はTextと同等のことを認識していません。 Int
値の特定の場合について
読み込み/表示機能について言えば...与えられたデータ型のペア( "失敗する可能性のある関数の読み込み"、 "関数の表示")をControl.Lensからプリズムに変換できますか? – danidiaz
うん!あなたは 'Read'を実行し、それが一致しているかどうかを知る能力が必要です。 –
、ここで中間段階でStrings
を使用せずに厳密Text
値に変換するためのコードは次のとおり
import Data.Text
import Data.Text.Lazy (toStrict)
import Data.Text.Lazy.Builder (toLazyText)
import Data.Text.Lazy.Builder.Int (decimal)
showIntegral :: Integral a => a -> T.Text
showIntegral = toStrict. toLazyText . decimal
モジュールData.Text.Lazy.Builder.RealFloat
は、浮動小数点値のための同様の機能を提供しています。
import Data.Text
import Data.Text.Lazy (toStrict)
import Data.Text.Lazy.Builder (toLazyText)
import Data.Text.Lazy.Builder.Int (decimal)
import Data.Text.Lazy.Builder.RealFloat (realFloat)
class ShowText a where
showText :: a -> Text
instance ShowText Int where
showText = toStrict . toLazyText . decimal
instance ShowText Float where
showText = toStrict . toLazyText . realFloat
はその後、我々はより多くのインスタンスの追加を開始することができます(タプルのための一例のために有用であろう):これらで
我々はShow
型クラスの私たち自身のバージョンを定義することができます。
をbasic-preludeとclassy-preludeの両方で今tshow
機能があります。
tshow :: Show a => a -> Text
標準プレリュードを使用している場合は、text-show libraryをお試しください。
があります。 – sandwood
http://hackage.haskell.org/packages/archive/bytestring-show/0.3.5.1/doc/html/Text-Show-ByteString.html – applicative