packages feed

tensort-1.0.0.0: src/Data/Tensort/Utils/SimplifyRegister.hs

module Data.Tensort.Utils.SimplifyRegister
  ( simplifyRegister,
    applySortingFromSimplifiedRegister,
  )
where

import qualified Data.Bifunctor
import Data.Tensort.Utils.Types (Record, RecordR)

simplifyRegister :: [RecordR] -> [Record]
simplifyRegister = map (Data.Bifunctor.second snd)

applySortingFromSimplifiedRegister :: [Record] -> [RecordR] -> [RecordR]
applySortingFromSimplifiedRegister sortedSimplifiedRegister unsortedRegiserR = do
  let registerR = acc sortedSimplifiedRegister [] unsortedRegiserR
  registerR
  where
    acc :: [Record] -> [RecordR] -> [RecordR] -> [RecordR]
    acc [] sortedRegisterR _ = sortedRegisterR
    acc (record : remainingRecords) sortedRegisterR unsortedRegiserR' = do
      let i = fst record
      let recordR = head (filter (\(i', _) -> i' == i) unsortedRegiserR')
      acc remainingRecords (sortedRegisterR ++ [recordR]) unsortedRegiserR'