diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,11 @@
 
+## 3.2.3.0
+
+*   Fix a bug that messes up printing identifiers with `'` in the name.
+    Now identifiers like `data Don't = Don't` show up properly.
+    [#65](https://github.com/cdepillabout/pretty-simple/pull/65)
+    Thanks George Thomas ([@georgefst](https://github.com/georgefst))!
+
 ## 3.2.2.0
 
 *   Remove whitespace from the ends of lines.
diff --git a/pretty-simple.cabal b/pretty-simple.cabal
--- a/pretty-simple.cabal
+++ b/pretty-simple.cabal
@@ -1,5 +1,5 @@
 name:                pretty-simple
-version:             3.2.2.0
+version:             3.2.3.0
 synopsis:            pretty printer for data types with a 'Show' instance.
 description:         Please see <https://github.com/cdepillabout/pretty-simple#readme README.md>.
 homepage:            https://github.com/cdepillabout/pretty-simple
diff --git a/src/Text/Pretty/Simple/Internal/ExprParser.hs b/src/Text/Pretty/Simple/Internal/ExprParser.hs
--- a/src/Text/Pretty/Simple/Internal/ExprParser.hs
+++ b/src/Text/Pretty/Simple/Internal/ExprParser.hs
@@ -138,9 +138,10 @@
 -- This is almost the same as the function
 --
 -- > parseOtherSimple = span $ \c ->
--- >   notElem c ("{[()]}\"," :: String) && not (isDigit c)
+-- >   notElem c ("{[()]}\"," :: String) && not (isDigit c) && (c /= '\'')
 --
--- except 'parseOther' ignores digits that appear in Haskell-like identifiers.
+-- except 'parseOther' ignores digits and single quotes that appear in
+-- Haskell-like identifiers.
 --
 -- >>> parseOther "hello world []"
 -- ("hello world ","[]")
@@ -152,6 +153,12 @@
 -- ("hello","{[ 234 world")
 -- >>> parseOther "H3110 World"
 -- ("H3110 World","")
+-- >>> parseOther "Node' (Leaf' 1) (Leaf' 2)"
+-- ("Node' ","(Leaf' 1) (Leaf' 2)")
+-- >>> parseOther "I'm One"
+-- ("I'm One","")
+-- >>> parseOther "I'm 2"
+-- ("I'm ","2")
 parseOther :: String -> (String, String)
 parseOther = go False
   where
@@ -162,8 +169,8 @@
       -> (String, String)
     go _ [] = ("", "")
     go insideIdent cs@(c:cs')
-      | c `elem` ("{[()]}\"'," :: String) = ("", cs)
-      | isDigit c && not insideIdent = ("", cs)
+      | c `elem` ("{[()]}\"," :: String) = ("", cs)
+      | ignoreInIdent c && not insideIdent = ("", cs)
       | insideIdent = first (c :) (go (isIdentRest c) cs')
       | otherwise = first (c :) (go (isIdentBegin c) cs')
 
@@ -174,4 +181,7 @@
     isIdentRest :: Char -> Bool
     isIdentRest '_' = True
     isIdentRest '\'' = True
-    isIdentRest c = isAlpha c || isDigit c
+    isIdentRest c = isAlpha c || ignoreInIdent c
+
+    ignoreInIdent :: Char -> Bool
+    ignoreInIdent x = isDigit x || x == '\''
