-- |
-- Module      : Data.Rhythm.Permutations
-- Copyright   : (c) Eric Bailey, 2025
--
-- License     : MIT
-- Maintainer  : eric@ericb.me
-- Stability   : experimental
-- Portability : POSIX
--
-- Strictly lexicographically larger permutations of a given list of numbers.
module Data.Rhythm.Permutations where

import Data.List qualified as List

-- | Strictly lexicographically larger permutations of a given list of numbers.
--
-- >>> permutations [1,2,3]
-- [[1,2,3],[2,1,3],[3,2,1],[2,3,1],[3,1,2],[1,3,2]]
-- >>> permutations [3,1,2]
-- [[3,1,2],[3,2,1]]
permutations :: (Integral a) => [a] -> [[a]]
permutations :: forall a. Integral a => [a] -> [[a]]
permutations [a]
xs = [a]
xs [a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
: ([a] -> Bool) -> [[a]] -> [[a]]
forall a. (a -> Bool) -> [a] -> [a]
filter ([a] -> [a] -> Bool
forall a. Ord a => a -> a -> Bool
> [a]
xs) ([a] -> [[a]]
forall a. [a] -> [[a]]
List.permutations [a]
xs)