2022-02-11 15:38:35 -05:00
|
|
|
|
module Luau.Type.ToString where
|
|
|
|
|
|
|
|
|
|
open import FFI.Data.String using (String; _++_)
|
2022-03-02 18:26:58 -05:00
|
|
|
|
open import Luau.Type using (Type; nil; _⇒_; none; any; number; boolean; string; _∪_; _∩_; normalizeOptional)
|
2022-02-11 15:38:35 -05:00
|
|
|
|
|
|
|
|
|
{-# TERMINATING #-}
|
|
|
|
|
typeToString : Type → String
|
|
|
|
|
typeToStringᵁ : Type → String
|
|
|
|
|
typeToStringᴵ : Type → String
|
|
|
|
|
|
|
|
|
|
typeToString nil = "nil"
|
|
|
|
|
typeToString (S ⇒ T) = "(" ++ (typeToString S) ++ ") -> " ++ (typeToString T)
|
|
|
|
|
typeToString none = "none"
|
|
|
|
|
typeToString any = "any"
|
2022-02-18 14:09:00 -05:00
|
|
|
|
typeToString number = "number"
|
2022-03-02 17:02:51 -05:00
|
|
|
|
typeToString boolean = "boolean"
|
2022-03-02 18:26:58 -05:00
|
|
|
|
typeToString string = "string"
|
2022-02-11 15:38:35 -05:00
|
|
|
|
typeToString (S ∪ T) with normalizeOptional(S ∪ T)
|
|
|
|
|
typeToString (S ∪ T) | ((S′ ⇒ T′) ∪ nil) = "(" ++ typeToString (S′ ⇒ T′) ++ ")?"
|
|
|
|
|
typeToString (S ∪ T) | (S′ ∪ nil) = typeToString S′ ++ "?"
|
|
|
|
|
typeToString (S ∪ T) | (S′ ∪ T′) = "(" ++ typeToStringᵁ (S ∪ T) ++ ")"
|
|
|
|
|
typeToString (S ∪ T) | T′ = typeToString T′
|
|
|
|
|
typeToString (S ∩ T) = "(" ++ typeToStringᴵ (S ∩ T) ++ ")"
|
|
|
|
|
|
|
|
|
|
typeToStringᵁ (S ∪ T) = (typeToStringᵁ S) ++ " | " ++ (typeToStringᵁ T)
|
|
|
|
|
typeToStringᵁ T = typeToString T
|
|
|
|
|
|
|
|
|
|
typeToStringᴵ (S ∩ T) = (typeToStringᴵ S) ++ " & " ++ (typeToStringᴵ T)
|
|
|
|
|
typeToStringᴵ T = typeToString T
|