------------------------------------------------------------------------
-- The Agda standard library
--
-- A way to specify that a function's argument takes a default value
-- if the argument is not passed explicitly.
------------------------------------------------------------------------

{-# OPTIONS --cubical-compatible --safe #-}

module Data.Default where

-- An argument of type `WithDefault {a} {A} x` is an argument of type
-- `A` that happens to default to `x` if no other value is specified
-- (as long as the `default` instance is in scope)

infixl 0 _!
record WithDefault {a} {A : Set a} (x : A) : Set a where
  constructor _!
  field value : A
open WithDefault public

instance
  default :  {a} {A : Set a} {x : A}  WithDefault x
  default {x = x} .value = x

-- See README.Data.Default for an example