--Cookbook.Essential.Continuous
module Cookbook.Essential.Continuous(Continuous(..)) where
import qualified Cookbook.Essential.Common as Cm
import qualified Cookbook.Ingredients.Functional.Break as Br
import qualified Cookbook.Ingredients.Lists.Access as Ac
class Continuous list part where
after :: list -> part -> list
before :: list -> part -> list
delete :: list -> part -> list
instance (Eq a) => Continuous [a] a where
after x c = tail $ Br.removeBreak (/=c) x
before x c = Br.filterBreak (/=c) x
delete x c = filter (/= c) x
instance (Eq a) => Continuous [a] [a] where
after [] _ = []
after x c = if Ac.isBefore x c then Cm.sub x (length c) else after (tail x) c
before [] _ = []
before x c = if Ac.isBefore x c then [] else (head x) : before (tail x) c
delete [] _ = []
delete x c = if not (x `Ac.contains` c) then x else (before x c) ++ delete (after x c) c