replaces :: ByteString -> [ByteString]
replaces w = if B.null w
                 then []
                 else let strs = if B.length w == 1
                          then return $ B.pack letters
                          else splits' w >>= \(first, second) ->
                               letters >>= \letter ->
                               let second' = B.cons letter (B.tail second) in
                               return $ B.concat [first, second']
                      in filter (w /=) strs
replaces :: ByteString -> [ByteString]
replaces w = if B.null w
                 then []
                 else let strs = if B.length w == 1
                          then return $ B.pack letters
                          else splits' w >>= \(first, second) ->
                               letters >>= \letter ->
                               let second' = B.cons letter (B.tail second) in
                               return $ B.concat [first, second']
                      in filter (w /=) strs
replaces w = if B.null w
                 then []
                 else let strs = if B.length w == 1
                          then return $ B.pack letters
                          else splits' w >>= \(first, second) ->
                               letters >>= \letter ->
                               let second' = B.cons letter (B.tail second) in
                               return $ B.concat [first, second']
                      in filter (w /=) strs