{- | 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)