packages feed

utf8-conversions (empty) → 0.1.0.0

raw patch · 7 files changed

+503/−0 lines, 7 filesdep +basedep +bytestringdep +textsetup-changed

Dependencies added: base, bytestring, text, text-short, utf8-conversions, utf8-string

Files

+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Changelog for utf8-conversions++#### 0.1.0.0.++init package
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Shintaro Sakata (c) 2020++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Author name here nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,37 @@+# `utf8-conversions` safe and easy++This package provides a Data.Convertible.Utf8 library for easy conversion of many string types in Haskell++## Support++- String+- ByteString+- ByteStringBuilder+- LazyByteString+- ByteStringShort+- Text+- LazyText+- TextBuilder+- TextShort++Supports type conversion between the above types.+Byte string is assumed to be in utf-8 encoding.++## Why?++String conversion in haskell is more difficult than in other languages and needs to be easier.++In particular, the OverloadedStrings pragma does not work properly when creating a ByteString.++So why not other conversion libraries?+There are many other conversion libraries that use the Maybe type for safety or are not explicitly stated as utf8.++Libraries that use maybe types are very labor intensive.+Libraries that do not explicitly state UTF8 are insecure++Therefore, this library clearly states that it assumes UTF8 and performs the conversion without using the MAYBE type, which is both safe and easy.+。++## Get involved!++If there's a bug or a better way to convert, please report it!
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Data/Convertible/Utf8.hs view
@@ -0,0 +1,367 @@+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE MultiParamTypeClasses #-}++module Data.Convertible.Utf8 where++import qualified Data.ByteString           as BS+import qualified Data.ByteString.Builder   as BSB+import qualified Data.ByteString.Lazy      as BSL+import qualified Data.ByteString.Lazy.UTF8 as BSL.UTF8+import qualified Data.ByteString.Short     as BSS+import qualified Data.ByteString.UTF8      as BS.UTF8+import           Data.Maybe                (fromJust)+import qualified Data.Text                 as T+import qualified Data.Text.Encoding        as TE+import qualified Data.Text.Lazy            as TL+import qualified Data.Text.Lazy.Builder    as TB+import qualified Data.Text.Lazy.Encoding   as TLE+import qualified Data.Text.Short           as TS++-- | A typeclass that represents something that can be converted.+--  A @Convertible a b@ instance represents an @a@ that can be converted to a @b@.+class Convertible a b where+  -- | Convert from @a@ to @b@.+  --    Byte string is assumed to be in utf-8 encoding.+  convert :: a -> b++-- Convert from String++instance Convertible String String where+  {-# INLINE convert #-}+  convert = id++instance Convertible String T.Text where+  {-# INLINE convert #-}+  convert = T.pack++instance Convertible String TL.Text where+  {-# INLINE convert #-}+  convert = TL.pack++instance Convertible String TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromString++instance Convertible String TS.ShortText where+  {-# INLINE convert #-}+  convert = TS.fromString++instance Convertible String BS.ByteString where+  {-# INLINE convert #-}+  convert = BS.UTF8.fromString++instance Convertible String BSL.ByteString where+  {-# INLINE convert #-}+  convert = BSL.UTF8.fromString++instance Convertible String BSB.Builder where+  {-# INLINE convert #-}+  convert = BSB.stringUtf8++instance Convertible String BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort . BS.UTF8.fromString++-- Convert from Text++instance Convertible T.Text String where+  {-# INLINE convert #-}+  convert = T.unpack++instance Convertible T.Text T.Text where+  {-# INLINE convert #-}+  convert = id++instance Convertible T.Text TL.Text where+  {-# INLINE convert #-}+  convert = TL.fromStrict++instance Convertible T.Text TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromText++instance Convertible T.Text TS.ShortText where+  {-# INLINE convert #-}+  convert = TS.fromText++instance Convertible T.Text BS.ByteString where+  {-# INLINE convert #-}+  convert = TE.encodeUtf8++instance Convertible T.Text BSL.ByteString where+  {-# INLINE convert #-}+  convert = BSL.fromStrict . TE.encodeUtf8++instance Convertible T.Text BSB.Builder where+  {-# INLINE convert #-}+  convert = TE.encodeUtf8Builder++instance Convertible T.Text BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort . TE.encodeUtf8++-- Convert from LazyText++instance Convertible TL.Text String where+  {-# INLINE convert #-}+  convert = TL.unpack++instance Convertible TL.Text T.Text where+  {-# INLINE convert #-}+  convert = TL.toStrict++instance Convertible TL.Text TL.Text where+  {-# INLINE convert #-}+  convert = id++instance Convertible TL.Text TS.ShortText where+  {-# INLINE convert #-}+  convert = TS.fromText . TL.toStrict++instance Convertible TL.Text TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromLazyText++instance Convertible TL.Text BS.ByteString where+  {-# INLINE convert #-}+  convert = BSL.toStrict . TLE.encodeUtf8++instance Convertible TL.Text BSL.ByteString where+  {-# INLINE convert #-}+  convert = TLE.encodeUtf8++instance Convertible TL.Text BSB.Builder where+  {-# INLINE convert #-}+  convert = TLE.encodeUtf8Builder++instance Convertible TL.Text BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort . BSL.toStrict . TLE.encodeUtf8++-- Convert from ShortText++instance Convertible TS.ShortText String where+  {-# INLINE convert #-}+  convert = TS.toString++instance Convertible TS.ShortText T.Text where+  {-# INLINE convert #-}+  convert = TS.toText++instance Convertible TS.ShortText TL.Text where+  {-# INLINE convert #-}+  convert = TL.fromStrict . TS.toText++instance Convertible TS.ShortText TS.ShortText where+  {-# INLINE convert #-}+  convert = id++instance Convertible TS.ShortText TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromText . TS.toText++instance Convertible TS.ShortText BS.ByteString where+  {-# INLINE convert #-}+  convert = TS.toByteString++instance Convertible TS.ShortText BSL.ByteString where+  {-# INLINE convert #-}+  convert = BSB.toLazyByteString . TS.toBuilder++instance Convertible TS.ShortText BSB.Builder where+  {-# INLINE convert #-}+  convert = TS.toBuilder++instance Convertible TS.ShortText BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = TS.toShortByteString++-- Convert from TextBuilder++instance Convertible TB.Builder String where+  {-# INLINE convert #-}+  convert = TL.unpack . TB.toLazyText++instance Convertible TB.Builder T.Text where+  {-# INLINE convert #-}+  convert = TL.toStrict . TB.toLazyText++instance Convertible TB.Builder TL.Text where+  {-# INLINE convert #-}+  convert = TB.toLazyText++instance Convertible TB.Builder TS.ShortText where+  {-# INLINE convert #-}+  convert = TS.fromText . TL.toStrict . TB.toLazyText++instance Convertible TB.Builder TB.Builder where+  {-# INLINE convert #-}+  convert = id++instance Convertible TB.Builder BS.ByteString where+  {-# INLINE convert #-}+  convert = BSL.toStrict . TLE.encodeUtf8 . TB.toLazyText++instance Convertible TB.Builder BSL.ByteString where+  {-# INLINE convert #-}+  convert = TLE.encodeUtf8 . TB.toLazyText++instance Convertible TB.Builder BSB.Builder where+  {-# INLINE convert #-}+  convert = TLE.encodeUtf8Builder . TB.toLazyText++instance Convertible TB.Builder BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort . BSL.toStrict . TLE.encodeUtf8 . TB.toLazyText++-- Convert from ByteString++instance Convertible BS.ByteString String where+  {-# INLINE convert #-}+  convert = BS.UTF8.toString++instance Convertible BS.ByteString T.Text where+  {-# INLINE convert #-}+  convert = TE.decodeUtf8++instance Convertible BS.ByteString TL.Text where+  {-# INLINE convert #-}+  convert = TLE.decodeUtf8 . BSL.fromStrict++instance Convertible BS.ByteString TS.ShortText where+  {-# INLINE convert #-}+  convert = fromJust . TS.fromByteString++instance Convertible BS.ByteString TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromLazyText . TL.fromStrict . TE.decodeUtf8++instance Convertible BS.ByteString BS.ByteString where+  {-# INLINE convert #-}+  convert = id++instance Convertible BS.ByteString BSL.ByteString where+  {-# INLINE convert #-}+  convert = BSL.fromStrict++instance Convertible BS.ByteString BSB.Builder where+  {-# INLINE convert #-}+  convert = BSB.byteString++instance Convertible BS.ByteString BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort++-- Convert from LazyByteString++instance Convertible BSL.ByteString String where+  {-# INLINE convert #-}+  convert = BSL.UTF8.toString++instance Convertible BSL.ByteString T.Text where+  {-# INLINE convert #-}+  convert = TE.decodeUtf8 . BSL.toStrict++instance Convertible BSL.ByteString TL.Text where+  {-# INLINE convert #-}+  convert = TLE.decodeUtf8++instance Convertible BSL.ByteString TS.ShortText where+  {-# INLINE convert #-}+  convert = fromJust . TS.fromByteString . BSL.toStrict++instance Convertible BSL.ByteString TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromLazyText . TLE.decodeUtf8++instance Convertible BSL.ByteString BS.ByteString where+  {-# INLINE convert #-}+  convert = BSL.toStrict++instance Convertible BSL.ByteString BSL.ByteString where+  {-# INLINE convert #-}+  convert = id++instance Convertible BSL.ByteString BSB.Builder where+  {-# INLINE convert #-}+  convert = BSB.lazyByteString++instance Convertible BSL.ByteString BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort . BSL.toStrict++-- Convert from ByteStringBuilder++instance Convertible BSB.Builder String where+  {-# INLINE convert #-}+  convert = BSL.UTF8.toString . BSB.toLazyByteString++instance Convertible BSB.Builder T.Text where+  {-# INLINE convert #-}+  convert = TE.decodeUtf8 . BSL.toStrict . BSB.toLazyByteString++instance Convertible BSB.Builder TL.Text where+  {-# INLINE convert #-}+  convert = TLE.decodeUtf8 . BSB.toLazyByteString++instance Convertible BSB.Builder TS.ShortText where+  {-# INLINE convert #-}+  convert = fromJust . TS.fromShortByteString . BSS.toShort . BSL.toStrict . BSB.toLazyByteString++instance Convertible BSB.Builder TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromLazyText . TLE.decodeUtf8 . BSB.toLazyByteString++instance Convertible BSB.Builder BS.ByteString where+  {-# INLINE convert #-}+  convert = BSL.toStrict . BSB.toLazyByteString++instance Convertible BSB.Builder BSL.ByteString where+  {-# INLINE convert #-}+  convert = BSB.toLazyByteString++instance Convertible BSB.Builder BSB.Builder where+  {-# INLINE convert #-}+  convert = id++instance Convertible BSB.Builder BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = BSS.toShort . BSL.toStrict . BSB.toLazyByteString++-- Convert from ShortByteString++instance Convertible BSS.ShortByteString String where+  {-# INLINE convert #-}+  convert = BS.UTF8.toString . BSS.fromShort++instance Convertible BSS.ShortByteString T.Text where+  {-# INLINE convert #-}+  convert = TE.decodeUtf8 . BSS.fromShort++instance Convertible BSS.ShortByteString TL.Text where+  {-# INLINE convert #-}+  convert = TLE.decodeUtf8 . BSL.fromStrict . BSS.fromShort++instance Convertible BSS.ShortByteString TS.ShortText where+  {-# INLINE convert #-}+  convert = fromJust . TS.fromShortByteString++instance Convertible BSS.ShortByteString TB.Builder where+  {-# INLINE convert #-}+  convert = TB.fromText . TE.decodeUtf8 . BSS.fromShort++instance Convertible BSS.ShortByteString BS.ByteString where+  {-# INLINE convert #-}+  convert = BSS.fromShort++instance Convertible BSS.ShortByteString BSL.ByteString where+  {-# INLINE convert #-}+  convert = BSL.fromStrict . BSS.fromShort++instance Convertible BSS.ShortByteString BSB.Builder where+  {-# INLINE convert #-}+  convert = BSB.byteString . BSS.fromShort++instance Convertible BSS.ShortByteString BSS.ShortByteString where+  {-# INLINE convert #-}+  convert = id
+ test/Spec.hs view
@@ -0,0 +1,2 @@+main :: IO ()+main = putStrLn "Test suite not yet implemented"
+ utf8-conversions.cabal view
@@ -0,0 +1,60 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.33.0.+--+-- see: https://github.com/sol/hpack+--+-- hash: c2d1679544a41e4847b7ff39dd859cf11cd5f2f6dd8ad00b4f09417a70240524++name:           utf8-conversions+version:        0.1.0.0+synopsis:       A conversion library that assumes utf8+description:    Please see the README on GitHub at <https://github.com/chemirea/utf8-conversions#readme>+category:       Data, Codec+homepage:       https://github.com/chemirea/utf8-conversions#readme+bug-reports:    https://github.com/chemirea/utf8-conversions/issues+author:         Shintaro Sakata+maintainer:     Shintaro Sakata+copyright:      2020 Shintaro Sakata+license:        BSD3+license-file:   LICENSE+build-type:     Simple+extra-source-files:+    README.md+    ChangeLog.md++source-repository head+  type: git+  location: https://github.com/chemirea/utf8-conversions++library+  exposed-modules:+      Data.Convertible.Utf8+  other-modules:+      Paths_utf8_conversions+  hs-source-dirs:+      src+  build-depends:+      base >=4.7 && <5+    , bytestring >=0.10.4 && <0.11+    , text >=1.0 && <1.3+    , text-short >=0.1.2 && <0.1.4+    , utf8-string >=1.0 && <1.2+  default-language: Haskell2010++test-suite utf8-conversions-test+  type: exitcode-stdio-1.0+  main-is: Spec.hs+  other-modules:+      Paths_utf8_conversions+  hs-source-dirs:+      test+  ghc-options: -threaded -rtsopts -with-rtsopts=-N+  build-depends:+      base >=4.7 && <5+    , bytestring >=0.10.4 && <0.11+    , text >=1.0 && <1.3+    , text-short >=0.1.2 && <0.1.4+    , utf8-conversions+    , utf8-string >=1.0 && <1.2+  default-language: Haskell2010