After the Agda Reference Manual
module Modules.Parameterised where open import Data.Nat
Modules may have parameters which are accessible inside the module.
The parameter can filled in outside of the module:
module X where
  module Y (x₁ : ℕ) where   -- parameter
    y₁ = suc x₁             -- using the parameter
    y₂ = suc y₁
  x₂ = suc (suc (Y.y₁ 10))  -- filling in the parameter
  x₂′ = suc (Y.y₂ 10)
One can define a new module by filling in a module parameter:
module X′ where
  module Y (x₁ : ℕ) where
    y₁ = suc x₁
    y₂ = suc y₁
  x₂ = suc (Y.y₂ 10)
  module Y′ = Y 10   -- module application
  x₂′ = suc Y′.y₂   -- usage
Opening with module application:
module X″ where
  module Y (x₁ : ℕ) where
    y₁ = suc x₁
    y₂ = suc y₁
  x₂ = suc (Y.y₂ 10)
  open module Y′ = Y 10   -- opened module application
  x₂′ = suc y₂   -- usage
open module M₁ pars = M₂ terms [public] mods ≡module M₁ pars = M₂ terms modsopen M₁ [public]