module CoverageCheck.Data.List.HPointwise.Core where

open import Haskell.Prelude hiding (All; a)

open import CoverageCheck.Data.List.All.Core

infixr 5 _:>>_

private
  variable
    @0 a : Type
    @0 p q : @0 a → Type
    r : ∀ {@0 x} → @0 p x → @0 q x → Type
    @0 x : a
    @0 xs : List a

--------------------------------------------------------------------------------

data HPointwise
  {@0 a : Type} {@0 p q : @0 a → Type}
  (r : ∀ {@0 x} → @0 p x → @0 q x → Type)
  : ∀ {@0 xs} → @0 All p xs → @0 All q xs → Type
  where
  HNil  : HPointwise r Nil Nil
  _:>>_ : ∀ {@0 x xs}
    → {@0 px : p x} {@0 pxs : All p xs}
    → {@0 qx : q x} {@0 qxs : All q xs}
    → r px qx
    → HPointwise r pxs qxs
    → HPointwise r (px :> pxs) (qx :> qxs)

{-# COMPILE AGDA2HS HPointwise deriving (Eq, Show) #-}