declare comptime {
    var stdin = 0 as File
    var stdout = 1 as File
    var stderr = 2 as File
}

type OS = 'aix'
    | 'android'
    | 'darwin'
    | 'dragonfly'
    | 'freebsd'
    | 'hurd'
    | 'illumos'
    | 'ios'
    | 'js'
    | 'linux'
    | 'nacl'
    | 'netbsd'
    | 'openbsd'
    | 'plan9'
    | 'solaris'
    | 'wasip1'
    | 'windows'
    | 'zos'
    ;

declare const os: OS

declare {
    const IsAix: bool
    const IsAndroid: bool
    const IsDarwin: bool
    const IsDragonfly: bool
    const IsFreebsd: bool
    const IsHurd: bool
    const IsIllumos: bool
    const IsIos: bool
    const IsJs: bool
    const IsLinux: bool
    const IsNacl: bool
    const IsNetbsd: bool
    const IsOpenbsd: bool
    const IsPlan9: bool
    const IsSolaris: bool
    const IsWasip1: bool
    const IsWindows: bool
    const IsZos: bool
}

type Arch = 'i386' 
    | 'amd64'
    | 'amd64p32'
    | 'arm'
    | 'armbe'
    | 'arm64'
    | 'arm64be'
    | 'loong64'
    | 'mips'
    | 'mipsle'
    | 'mips64le'
    | 'mips64p32'
    | 'mips64p32le'
    | 'ppc'
    | 'ppc64'
    | 'ppc64le'
    | 'riscv'
    | 's390'
    | 's390x'
    | 'sparc'
    | 'sparc64'
    | 'wasm'
    ;

declare const arch: Arch

declare {
    const Is386: bool
    const IsAmd64: bool
    const IsAmd64p32: bool
    const IsArm: bool
    const IsArmbe: bool
    const IsArm64: bool
    const IsArm64be: bool
    const IsLoong64: bool
    const IsMips: bool
    const IsMipsle: bool
    const IsMips64: bool
    const IsMips64le: bool
    const IsMips64p32: bool
    const IsMips64p32le: bool
    const IsPpc: bool
    const IsPpc64: bool
    const IsPpc64le: bool
    const IsRiscv: bool
    const IsRiscv64: bool
    const IsS390: bool
    const IsS390x: bool
    const IsSparc: bool
    const IsSparc64: bool
    const IsWasm: bool
}