diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+### 2.0.4
+
+* [Add multiline literal aligned with bar #148](https://github.com/yesodweb/shakespeare/pull/148)
+
 ### 2.0.3
 
 * `cassiusMixin` added
diff --git a/Text/Shakespeare/Text.hs b/Text/Shakespeare/Text.hs
--- a/Text/Shakespeare/Text.hs
+++ b/Text/Shakespeare/Text.hs
@@ -14,6 +14,8 @@
     , textFileReload
     , st -- | strict text
     , lt -- | lazy text, same as stext :)
+    , sbt -- | strict text whose left edge is aligned with bar ('|')
+    , lbt -- | lazy text, whose left edge is aligned with bar ('|')
     -- * Yesod code generation
     , codegen
     , codegenSt
@@ -57,7 +59,7 @@
   }
 
 
-stext, lt, st, text :: QuasiQuoter
+stext, lt, st, text, lbt, sbt :: QuasiQuoter
 stext = 
   QuasiQuoter { quoteExp = \s -> do
     rs <- settings
@@ -80,6 +82,27 @@
     quoteExp (shakespeare rs) $ filter (/='\r') s
     }
 
+dropBar :: [TL.Text] -> [TL.Text]
+dropBar [] = []
+dropBar (c:cx) = c:dropBar' cx
+  where
+    dropBar' txt = reverse $ drop 1 $ map (TL.drop 1 . TL.dropWhile (/= '|')) $ reverse txt
+
+lbt = 
+  QuasiQuoter { quoteExp = \s -> do
+    rs <- settings
+    render <- [|TL.unlines . dropBar . TL.lines . toLazyText|]
+    rendered <- shakespeareFromString rs { justVarInterpolation = True } s
+    return (render `AppE` rendered)
+    }
+
+sbt = 
+  QuasiQuoter { quoteExp = \s -> do
+    rs <- settings
+    render <- [|TL.toStrict . TL.unlines . dropBar . TL.lines . toLazyText|]
+    rendered <- shakespeareFromString rs { justVarInterpolation = True } s
+    return (render `AppE` rendered)
+    }
 
 textFile :: FilePath -> Q Exp
 textFile fp = do
diff --git a/shakespeare.cabal b/shakespeare.cabal
--- a/shakespeare.cabal
+++ b/shakespeare.cabal
@@ -1,5 +1,5 @@
 name:            shakespeare
-version:         2.0.3
+version:         2.0.4
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
diff --git a/test/Text/Shakespeare/TextSpec.hs b/test/Text/Shakespeare/TextSpec.hs
--- a/test/Text/Shakespeare/TextSpec.hs
+++ b/test/Text/Shakespeare/TextSpec.hs
@@ -101,6 +101,17 @@
       simpT "2" [stext|#{ show $ fst $ snd val }|]
       simpT "2" [stext|#{ show $ fst $ snd $ val}|]
 
+    it "aligned text with bar" $ do
+      let val = 3 :: Int
+      simpT "hoge\r\n3\r\n1\r\n" (TL.fromStrict [sbt|hoge
+                                                    |#{val}
+                                                    |1
+                                                    |])
+      simpT "hoge\r\n3\r\n1\r\n" [lbt|hoge
+                                     |#{val}
+                                     |1
+                                     |]
+
 simpT :: String -> TL.Text -> Assertion
 simpT a b = pack a @=? TL.toStrict b
 
