Early preview: syntax, standard library APIs, and tooling may change.

Working ProgramsInput and CLI Arguments

Input and CLI Arguments

Programs receive argv-style args and can read interactive input as Option[String].

Argv Shape

main receives List[String] argv: index 0 is the program entry, and user arguments start at index 1.

func main(args: List[String]) -> Void:
	user_args: List[String] = args.drop(1)
	print(user_args.length())

Input

input(prompt) prints a prompt and returns Option[String].

match input("name> "):
    Some(name): print(name)
    None: print("bye")

EOF As None

Ctrl-D or EOF returns None instead of a null string.

match input("name> "):
    None: print("no input")
    Some(name): print(name)

Stderr

print_error writes a line to stderr.

print_error("missing file")

Exit Codes

Return Int from main when the program needs success or failure status.

func main(args: List[String]) -> Int:
	print("ok")
	0

Example

greeter.brp
func main(args: List[String]) -> Int:
	user_args: List[String] = args.drop(1)
	shout: Bool = user_args.contains("--shout")
	match input("name> "):
		Some(name):
			text: String = if shout:
				name.upper()
			else:
				name
			print("Hello, " + text.trim()) -- with stdin "Ada" and --shout, prints: name> Hello, ADA
			0
		None:
			print_error("no input")
			0

Try it

terminal
blorp run greeter.brp -- --shout