{-# LANGUAGE PackageImports #-} module StringTF where { import Control.Category((>>>)); import Prelude hiding((.),(>>)); import qualified System.Random.TF as TF; import qualified Data.Text; import qualified Data.Text.Encoding; import qualified Data.Text.ICU; import qualified "cryptohash-sha256" Crypto.Hash.SHA256; import qualified Data.Serialize; import qualified Data.ByteString as Strict; import qualified Data.Either.Combinators; import Data.Word(Word64); stringtf :: String -> TF.TFGen; stringtf = (Data.Text.pack :: String -> Data.Text.Text) >>> (Data.Text.ICU.normalize Data.Text.ICU.NFC :: Data.Text.Text -> Data.Text.Text) >>> (Data.Text.Encoding.encodeUtf8 :: Data.Text.Text -> Strict.ByteString) >>> (Crypto.Hash.SHA256.hash :: Strict.ByteString -> Strict.ByteString) -- "decode" Just Works because there are built-in decoders for Word64 and -- (a,b,c,d). Neither have metadata. Word64 is big-endian. >>> (Data.Serialize.decode :: Strict.ByteString -> Either String (Word64,Word64,Word64,Word64)) >>> (Data.Either.Combinators.fromRight' :: Either String (Word64,Word64,Word64,Word64) -> (Word64,Word64,Word64,Word64)) >>> (TF.seedTFGen :: (Word64,Word64,Word64,Word64) -> TF.TFGen); } --end