on text-jsstring help sign in
text/Data/JSString/Text.hs
64 lines 1.8 kB history raw
1{-# LANGUAGE ForeignFunctionInterface, UnliftedFFITypes, JavaScriptFFI,
2 UnboxedTuples, DeriveDataTypeable, GHCForeignImportPrim,
3 MagicHash, FlexibleInstances, BangPatterns, Rank2Types, CPP #-}
5{- | Conversion between 'Data.Text.Text' and 'Data.JSString.JSString'
7 -}
9-- Moved from ghcjs-base with text-jsstring support.
11module Data.JSString.Text
12 ( textToJSString
13 , textFromJSString
14 , lazyTextToJSString
15 , lazyTextFromJSString
16 , textFromJSVal
17 , lazyTextFromJSVal
18 ) where
20import GHCJS.Prim
22import GHC.Exts (Any)
24import Control.DeepSeq
26import qualified Data.Text as T
27import qualified Data.Text.Internal as T
28import qualified Data.Text.Lazy as TL
29import Data.JSString (JSString)
31import GHCJS.Marshal.Pure
32import Unsafe.Coerce
34textToJSString :: T.Text -> JSString
35textToJSString (T.Text txt) = txt
36{-# INLINE textToJSString #-}
38textFromJSString :: JSString -> T.Text
39textFromJSString = T.Text
40{-# INLINE textFromJSString #-}
42lazyTextToJSString :: TL.Text -> JSString
43lazyTextToJSString t = rnf t `seq` js_lazyTextToString (unsafeCoerce t)
44{-# INLINE lazyTextToJSString #-}
46lazyTextFromJSString :: JSString -> TL.Text
47lazyTextFromJSString = TL.fromStrict . textFromJSString
48{-# INLINE lazyTextFromJSString #-}
50-- | returns the empty Text if not a string
51textFromJSVal :: JSVal -> T.Text
52textFromJSVal v = T.Text $ pFromJSVal v -- TODO check if val is a string?
53{-# INLINE textFromJSVal #-}
55-- | returns the empty Text if not a string
56lazyTextFromJSVal :: JSVal -> TL.Text
57lazyTextFromJSVal = TL.fromStrict . textFromJSVal
58{-# INLINE lazyTextFromJSVal #-}
60-- ----------------------------------------------------------------------------
62foreign import javascript unsafe
63 "h$lazyTextToString"
64 js_lazyTextToString :: Any -> JSString