fork download
  1. import Control.Arrow
  2.  
  3. safeTail :: [a] -> [a]
  4. safeTail [] = []
  5. safeTail (_:xs) = xs
  6.  
  7. floyd :: [a] -> [a] -> ([a], [a])
  8. floyd xs [] = ([], xs)
  9. floyd (x:xs) (_:ys) = first (x:) $ floyd xs (safeTail ys)
  10.  
  11. split :: [a] -> ([a], [a])
  12. split xs = floyd xs xs
  13.  
  14. main = do
  15. print $ split [1..5]
  16. print $ split [1..6]
  17. print $ split [1..7]
Success #stdin #stdout 0s 4708KB
stdin
Standard input is empty
stdout
([1,2,3],[4,5])
([1,2,3],[4,5,6])
([1,2,3,4],[5,6,7])