spaceout :: [L] -> [L]
spaceout = concatMap fm
  where
    split p = words . concatMap fix
      where
        fix c | p c = [' ', c, ' ']
        fix c = [c]
    fm (Token s) = map Token . split (`elem` forbidden_characters) $ s
    fm v = [v]
spaceout :: [L] -> [L]
spaceout = concatMap fm
  where
    split p = words . concatMap fix
      where
        fix c | p c = [' ', c, ' ']
        fix c = [c]
    fm (Token s) = map Token . split (`elem` forbidden_characters) $ s
    fm v = [v]
spaceout = concatMap fm
  where
    split p = words . concatMap fix
      where
        fix c | p c = [' ', c, ' ']
        fix c = [c]
    fm (Token s) = map Token . split (`elem` forbidden_characters) $ s
    fm v = [v]