{- |
Description: Split a list
Copyright: Copyright (C) 2021 Yoo Chung
License: GPL-3.0-or-later
Maintainer: dev@chungyc.org

Some solutions to "Problems.P17" of Ninety-Nine Haskell "Problems".
-}
module Solutions.P17 (split) where

-- | Split a list into two parts; the length of the first part is given.
split :: [a] -> Int -> ([a], [a])
split :: forall a. [a] -> Int -> ([a], [a])
split [] Int
_     = ([], [])
split [a]
xs Int
0     = ([], [a]
xs)
split (a
x:[a]
xs) Int
n = let ([a]
ys, [a]
zs) = [a] -> Int -> ([a], [a])
forall a. [a] -> Int -> ([a], [a])
split [a]
xs (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) in (a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
ys, [a]
zs)