Plutus.V1.Ledger.Interval
Table des matières
📜 Overview
🔧 LANGUAGE PRAGMAS AND IMPORTS
🗄️ Data Types
➰ Extended
🆙 UpperBound
🆕 LowerBound
📏 Interval
⚙️ Functions
⚖️ strictUpperBound
⚖️ strictLowerBound
🔽 lowerBound
🔼 upperBound
🏷️ interval
🔢 singleton
▶️ from
◀️ to
♾️ always
🚫 never
🧮 member
🔄 overlaps
🛠️ intersection
🏔️ hull
🔍 contains
📭 isEmpty
⏮️ before
⏭️ after
🤝 Typeclass Instances
🏭 On-Chain Derivations
📚 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
etmakeLift
.
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èreIsData
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