packages feed

cpmonad-0.1.0.0: lib/Cpmonad/Misc.hs

{-# OPTIONS_GHC -Wno-orphans #-}

-- | Miscellaneous useful functions and orphan instances.
module Cpmonad.Misc where

import Data.Default
import Data.Vector (Vector)
import Data.Vector qualified as V
import Data.Vector.Strict qualified as VS
import Data.Vector.Algorithms.Merge qualified as VA

-- Utility functions

-- | Sort a vector
vsort :: Vector Int -> Vector Int
vsort v' = V.create do
  v <- V.unsafeThaw v'
  VA.sort v
  pure v

-- | Inverse of a permutation
vinverse :: Vector Int -> Vector Int
vinverse p = V.update_ p p (V.enumFromN 0 $ V.length p)

-- Orphan instances

instance Default (V.Vector a) where
  def = V.empty

instance Default (VS.Vector a) where
  def = VS.empty