module Data.Tensort.Subalgorithms.Magicsort
  ( magicsort,
  )
where

import Data.Tensort.Subalgorithms.Bogosort (bogosort)
import Data.Tensort.Subalgorithms.Permutationsort (permutationsort)
import Data.Tensort.Utils.Types (Sortable)

magicsort :: Sortable -> Sortable
magicsort :: Sortable -> Sortable
magicsort Sortable
xs = do
  let result1 :: Sortable
result1 = Sortable -> Sortable
permutationsort Sortable
xs
  let result2 :: Sortable
result2 = Sortable -> Sortable
bogosort Sortable
xs
  if Sortable
result1 Sortable -> Sortable -> Bool
forall a. Eq a => a -> a -> Bool
== Sortable
result2
    then Sortable
result1
    else Sortable -> Sortable
magicsort Sortable
xs