diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,80 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our
+project and our community a harassment-free experience for everyone,
+regardless of age, body size, disability, ethnicity, gender identity
+and expression, level of experience, nationality, personal appearance,
+race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive
+environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual
+attention or advances
+* Trolling, insulting/derogatory comments, and personal or political
+  attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or
+  electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in
+  a professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of
+acceptable behavior and are expected to take appropriate and fair
+corrective action in response to any instances of unacceptable
+behavior.
+
+Project maintainers have the right and responsibility to remove, edit,
+or reject comments, commits, code, wiki edits, issues, and other
+contributions that are not aligned to this Code of Conduct, or to ban
+temporarily or permanently any contributor for other behaviors that
+they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public
+spaces when an individual is representing the project or its
+community. Examples of representing a project or community include
+using an official project e-mail address, posting via an official
+social media account, or acting as an appointed representative at an
+online or offline event. Representation of a project may be further
+defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior
+may be reported by contacting the [project team](evan@theunixman.com)
+at <evan@theunixman.com>. All complaints will be reviewed and
+investigated and will result in a response that is deemed necessary
+and appropriate to the circumstances. The project team is obligated to
+maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted
+separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct
+in good faith may face temporary or permanent repercussions as
+determined by other members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from
+the [Contributor Covenant][homepage], version 1.4, available
+at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/Source/Boomerang.hs b/Source/Boomerang.hs
--- a/Source/Boomerang.hs
+++ b/Source/Boomerang.hs
@@ -1,24 +1,32 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# Language TypeOperators, PolyKinds, MultiWayIf #-}
-
 module Boomerang (
     module Text.Boomerang,
     module Text.Boomerang.TH,
-    module Text.Boomerang.Texts,
+    module Text.Boomerang.String,
     module Control.Category,
-    TextsBoomerang,
+    module Text,
+    TextBoomerang,
+    parseText,
+    unparseText,
     (∘)
     ) where
 
-import Text (Text)
+import Lawless hiding ((.), (∘), (<>))
+import Text (Text, packed, unpacked, IsText)
 import Text.Boomerang
 import Text.Boomerang.TH
-import Text.Boomerang.Texts
+import Text.Boomerang.String
 import Control.Category ((.), id, Category)
 
-type TextsBoomerang a b = Boomerang TextsError [Text] a b
+type TextError = StringError
+type TextBoomerang a b = Boomerang TextError Text a b
 
 (∘) ∷ ∀ (b ∷ k) (c ∷ k) (a ∷ k) (cat ∷ k → k → *).
     Category cat ⇒ cat b c → cat a b → cat a c
 (∘) = (.)
-infix 9 ∘
+infixr 9 ∘
+
+parseText ∷ ∀ r b. (IsText b) ⇒ StringBoomerang () (r :- ()) → b → Either TextError r
+parseText p t = parseString p (t ^. unpacked)
+
+unparseText ∷ ∀ r b. (IsText b) ⇒ StringBoomerang () (r :- ()) → r → Maybe b
+unparseText p r = view packed <$> unparseString p r
diff --git a/Tests/Main.hs b/Tests/Main.hs
--- a/Tests/Main.hs
+++ b/Tests/Main.hs
@@ -15,4 +15,5 @@
     TJ.properties,
     TM.properties,
     TE.properties,
-    TX.properties]
+    TX.properties
+    ]
diff --git a/Tests/PipeDelimited.hs b/Tests/PipeDelimited.hs
new file mode 100644
--- /dev/null
+++ b/Tests/PipeDelimited.hs
@@ -0,0 +1,34 @@
+{-|
+Module:             PipeDelimited
+Description:        Data type for testing Boomerangs.
+Copyright:          © 2017 All rights reserved.
+License:            GPL-3
+Maintainer:         Evan Cofsky <evan@theunixman.com>
+Stability:          experimental
+Portability:        POSIX
+-}
+
+{-# Language TemplateHaskell #-}
+
+module PipeDelimited where
+
+import Lawless hiding ((∘), (<>))
+import Arbitrary
+import Boomerang
+import Test.QuickCheck
+
+newtype PipeDelimited = PipeDelimited [Text] deriving (Eq, Show, Ord)
+makePrisms ''PipeDelimited
+makeBoomerangs ''PipeDelimited
+
+-- pipeDelimited =
+--     (
+--         rPipeDelimited ∘ chainr (satisfy (≢ '|')) "|"
+--     )
+
+-- instance Arbitrary PipeDelimited where
+--     arbitrary =
+--         let
+--             w = (suchThat arbitrary $ allOf each (≢ '|'))
+--         in
+--             PipeDelimited <$> listOf w
diff --git a/Tests/TestBoomerang.hs b/Tests/TestBoomerang.hs
new file mode 100644
--- /dev/null
+++ b/Tests/TestBoomerang.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+{-|
+Module:             TestBoomerang
+Description:        Test the Boomerang module of liblawless.
+Copyright:          © 2017 All rights reserved.
+License:            GPL-3
+Maintainer:         Evan Cofsky <evan@theunixman.com>
+Stability:          experimental
+Portability:        POSIX
+-}
+
+module TestBoomerang where
+
+import Lawless
+import Arbitrary
+
+import Test.Framework
+import Test.Framework.TH
+import Test.Framework.Providers.QuickCheck2 (testProperty)
+import Test.QuickCheck
+
+data PipeDelimited = PipeDelimited [Text] deriving (Eq, Show, Ord)
+instance Arbitrary PipeDelimited where
+    arbitrary =
+        let
+            w = (suchThat arbitrary $ allOf each (≢ '|'))
+        in
+            PipeDelimited <$> listOf1 w
+
+properties ∷ Test
+properties = $(testGroupGenerator)
diff --git a/liblawless.cabal b/liblawless.cabal
--- a/liblawless.cabal
+++ b/liblawless.cabal
@@ -1,5 +1,5 @@
 name:                liblawless
-version:             0.19.1
+version:             0.19.2
 synopsis:            Prelude based on protolude for GHC 8 and beyond.
 license:             GPL-3
 license-file:        LICENSE
@@ -12,6 +12,7 @@
                    ChangeLog
                    README.md
                    TODO.org
+                   CODE_OF_CONDUCT.md
                    Tests/*.hs
 cabal-version:       >=1.24
 data-files:
@@ -27,7 +28,7 @@
 source-repository this
   type:     git
   location:   git@gitlab.com:misandrist/liblawless.git
-  tag: v0.19.1
+  tag: v0.19.2
 
 library
   ghc-options: -Wall -Wno-redundant-constraints -O2
@@ -70,10 +71,12 @@
                      MultiParamTypeClasses
                      OverloadedStrings
                      PartialTypeSignatures
+                     PolyKinds
                      RankNTypes
                      ScopedTypeVariables
                      StandaloneDeriving
                      TypeFamilies
+                     TypeOperators
                      TypeSynonymInstances
   build-depends:
                 aeson                      >= 0.11.2 && < 0.12,
