Skip to content

Instantly share code, notes, and snippets.

@danidiaz
Created July 26, 2020 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danidiaz/e740c0f0e54b76ac3326bca1d1be3a6a to your computer and use it in GitHub Desktop.
Save danidiaz/e740c0f0e54b76ac3326bca1d1be3a6a to your computer and use it in GitHub Desktop.
{-# LANGUAGE ViewPatterns #-}
module Main where
import Data.Char
import qualified Data.List
import Data.Text
data SplitState
= BreakingOnSpace
| BreakingOnNonSpace
splitty :: Text -> [Either Text Text]
splitty = \t -> Data.List.unfoldr (uncurry step) (BreakingOnSpace, t)
where
step :: SplitState -> Text -> Maybe (Either Text Text, (SplitState, Text))
step _ t
| Data.Text.null t =
Nothing
step (break' -> (sstate, ctor, br)) (br -> (t0, rest)) =
Just (ctor t0, (sstate, rest))
break' :: SplitState -> (SplitState, Text -> Either Text Text, Text -> (Text, Text))
break' BreakingOnSpace = (BreakingOnNonSpace, Right, Data.Text.break isSpace)
break' BreakingOnNonSpace = (BreakingOnSpace, Left, Data.Text.break (not . isSpace))
main :: IO ()
main = return ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment