import { PutString, Bind, Kind1, JsExpr, ReadLine, Do, PutStringLn, } from '../stdlib' export type main = [ PutStringLn<'Guess a number between 0 & 9. You have 5 guesses'>, Bind, StartGuessing> ] interface AskForGuess extends Kind1 { return: `${this['input']}` extends `${N}` ? PutStringLn<'Yay! You got it right!'> : Do< [ PutString<'Wrong guess. Total attempts'>, PutStringLn<` ${[...Attempts, 0] extends infer Ls extends 0[] ? Ls['length'] : 0}/5`>, (StartGuessing<[...Attempts, 0]> & { input: N })['return'] ] > } interface StartGuessing extends Kind1 { return: Attempts['length'] extends 5 ? PutStringLn<'Max attempts exceeded. Game over!'> : Bind< Do<[PutString<'Your guess? '>, ReadLine]>, AskForGuess > }