Plutus.V1.Ledger.Interval

Table des matières

  1. 📜 Overview

  2. 🔧 LANGUAGE PRAGMAS AND IMPORTS

  3. 🗄️ Data Types

    • ➰ Extended

    • 🆙 UpperBound

    • 🆕 LowerBound

    • 📏 Interval

  4. ⚙️ Functions

    • ⚖️ strictUpperBound

    • ⚖️ strictLowerBound

    • 🔽 lowerBound

    • 🔼 upperBound

    • 🏷️ interval

    • 🔢 singleton

    • ▶️ from

    • ◀️ to

    • ♾️ always

    • 🚫 never

    • 🧮 member

    • 🔄 overlaps

    • 🛠️ intersection

    • 🏔️ hull

    • 🔍 contains

    • 📭 isEmpty

    • ⏮️ before

    • ⏭️ after

  5. 🤝 Typeclass Instances

  6. 🏭 On-Chain Derivations

  7. 📚 Glossary


1 📜 Overview

Le module Plutus.V1.Ledger.Interval définit un type générique d’intervalle sur tout domaine ordonné, avec support des extrémités ouvertes/fermées et bornées/non-bornées, ainsi qu’une API riche pour construire et interroger des intervalles :

  • Extended a : valeurs étendues avec moins l’infini et plus l’infini.

  • LowerBound a, UpperBound a : bornes contenant un Extended a et un indicateur d’inclusivité.

  • Interval a : une paire de bornes inférieure et supérieure.

  • Fonctions : création d’intervalles (interval, singleton, from, to, always, never) et interrogation (member, overlaps, etc.).

  • Instances : Functor, Eq, Ord, JoinSemiLattice, MeetSemiLattice, Pretty pour affichage humain.

  • Tous les types principaux dérivent Generic et NFData, et la sérialisation on-chain est assurée via makeIsDataIndexed et makeLift.


2 🔧 LANGUAGE PRAGMAS AND IMPORTS

Pas de DataKinds nécessaire ici ; les pragmas clés incluent la dérivation générique, Template Haskell, et les binds flexibles/monomorphiques.

NoImplicitPrelude : on utilise PlutusTx.Prelude pour le code on-chain.

OPTIONS_GHC : assurent la préservation des pragmas d’interface et la spécialisation pour les performances on-chain.


3 🗄️ Data Types

3.1 ➰ Extended

But : représenter des valeurs avec moins l’infini ou plus l’infini.

Exemple :

Finite 5 :: Extended Int
NegInf             == NegInf
PosInf             > Finite 100

3.2 🆙 UpperBound

Champs :

  • Extrémité de type Extended a.

  • Indicateur d’inclusivité : True = inclusif (]), False = exclusif ()).

Exemple :

UpperBound (Finite 10) True  -- ≤10
UpperBound PosInf False      -- non borné au-dessus

3.3 🆕 LowerBound

Inclusivité : True = inclusif ([), False = exclusif ().

Exemple :

LowerBound (Finite 0) True   -- ≥0
LowerBound NegInf False      -- non borné en dessous

3.4 📏 Interval

Combine une borne inférieure et supérieure pour former un intervalle.

Exemple :

Interval (lowerBound 1) (upperBound 5)  -- [1,5]

4 ⚙️ Functions

Toutes les fonctions sont marquées INLINABLE pour la compilation on-chain.


4.1 ⚖️ strictUpperBound

Entrée : extrémité a. Sortie : borne supérieure exclusive (a.

Exemple :

strictUpperBound 10  -- valeurs <10

4.2 ⚖️ strictLowerBound

Borne inférieure exclusive (a.


4.3 🔽 lowerBound

Borne inférieure inclusive [a.


4.4 🔼 upperBound

Borne supérieure inclusive a].


4.5 🏷️ interval

Intervalle fermé [lo, hi].


4.6 🔢 singleton

Intervalle contenant une seule valeur [x, x].


4.7 ▶️ from

Intervalle [lo, +∞].


4.8 ◀️ to

Intervalle [-∞, hi].


4.9 ♾️ always

Domaine entier [-∞, +∞].


4.10 🚫 never

Intervalle vide.


4.11 🧮 member

Vérifie si x appartient à l’intervalle i.


4.12 🔄 overlaps

Vrai si deux intervalles partagent au moins un point.


4.13 🛠️ intersection

Plus grand sous-intervalle commun.


4.14 🏔️ hull

Plus petit intervalle contenant les deux.


4.15 🔍 contains

Vrai si un intervalle est inclus dans un autre.


4.16 📭 isEmpty

Vrai pour un intervalle vide (y compris bornes inversées ou exclusions aux bornes).


4.17 ⏮️ before

Vrai si x est strictement avant le début de l’intervalle.


4.18 ⏭️ after

Vrai si x est strictement après la fin de l’intervalle.


5 🤝 Typeclass Instances

  • Functor : applique une fonction aux extrémités de l’intervalle.

  • JoinSemiLattice : /\ = intersection, \/ = hull, bottom = intervalle vide.

  • MeetSemiLattice : /\ = intersection, top = tout le domaine.

  • Eq et Ord explicites via la stratégie de dérivation ou des définitions INLINABLE pour garantir le bon comportement on-chain pour Extended, UpperBound, LowerBound, Interval.


6 🏭 On-Chain Derivations

  • PlutusTx.makeIsDataIndexed : génère IsData pour la sérialisation on-chain, avec indices de constructeur.

  • makeLift : Template Haskell pour l’inclusion on-chain.


7 📚 Glossary

  • Extended a : domaine a étendu avec NegInf et PosInf.

  • Closure : Booléen indiquant si la borne est inclusive (True) ou exclusive (False).

  • LowerBound/UpperBound : bornes associant un Extended a et un indicateur d’inclusivité.

  • Interval a : plage de valeurs entre deux bornes.

  • Functor : structure supportant fmap sur les bornes.

  • Join/Meet SemiLattice : classes algébriques pour hull et intersection.

  • BoundedJoin/MeetSemiLattice : incluent les bornes (vide, tout le domaine).

  • INLINABLE : pragma GHC pour la spécialisation on-chain.

  • makeIsDataIndexed : TH pour instances IsData avec indices de constructeur.

  • makeLift : TH pour l’inclusion de valeurs dans PlutusTx.

  • StrictData : pragma rendant tous les champs de données stricts.

  • NoImplicitPrelude : utilise PlutusTx.Prelude au lieu du Prelude Haskell classique.


Last updated