{-# OPTIONS --cubical --safe #-}
module Data.List.Sugar where
open import Data.List.Base
open import Prelude
[_] : A → List A
[ x ] = x ∷ []
pure : A → List A
pure = [_]
_>>=_ : List A → (A → List B) → List B
_>>=_ = flip concatMap
_>>_ : List A → List B → List B
xs >> ys = xs >>= const ys
_<*>_ : List (A → B) → List A → List B
fs <*> xs = do
  f ← fs
  x ← xs
  [ f x ]
guard : Bool → List ⊤
guard false = []
guard true  = [ tt ]
liftA2 : (A → B → C) → List A → List B → List C
liftA2 {A = A} {B = B} {C = C} f xs ys = go xs
  where
  go′ : A → List A → List B → List C
  go : List A → List C
  go′ x xs [] = go xs
  go′ x xs (y ∷ ys) = f x y ∷ go′ x xs ys
  go [] = []
  go (x ∷ xs) = go′ x xs ys