29 lines
636 B
Idris
29 lines
636 B
Idris
module Quox.Syntax.Universe
|
|
|
|
import Quox.Pretty
|
|
|
|
import Data.Fin
|
|
|
|
%default total
|
|
|
|
|
|
||| `UAny` doesn't show up in programs, but when checking something is
|
|
||| just some type (e.g. in a signature) it's checked against `Star UAny`
|
|
public export
|
|
data Universe = U Nat | UAny
|
|
%name Universe l
|
|
|
|
private Repr : Type
|
|
Repr = (Fin 2, Nat)
|
|
|
|
private %inline repr : Universe -> Repr
|
|
repr u = case u of U i => (0, i); UAny => (1, 0)
|
|
|
|
export Eq Universe where (==) = (==) `on` repr
|
|
export Ord Universe where compare = compare `on` repr
|
|
|
|
export
|
|
PrettyHL Universe where
|
|
prettyM UAny = pure $ hl Delim "_"
|
|
prettyM (U l) = pure $ hl Free $ pretty l
|