Skip to content

Instantly share code, notes, and snippets.

@dacr
Created March 28, 2025 09:02
Show Gist options
  • Select an option

  • Save dacr/6d9b015b56a584e35beab6df22f57a43 to your computer and use it in GitHub Desktop.

Select an option

Save dacr/6d9b015b56a584e35beab6df22f57a43 to your computer and use it in GitHub Desktop.
cats-parse graph query language experiment - hello world 4 / published by https://github.com/dacr/code-examples-manager #fc484393-ce97-44b6-bf6c-8f8addbf6a41/ffa6b8ec459a6a34c644662cca52821b325cdc9c
// summary : cats-parse graph query language experiment - hello world 4
// keywords : scala, typelevel, cats-parse, hello-world, @testable
// publish : gist
// authors : David Crosson
// license : Apache NON-AI License Version 2.0 (https://raw.githubusercontent.com/non-ai-licenses/non-ai-licenses/main/NON-AI-APACHE2)
// id : fc484393-ce97-44b6-bf6c-8f8addbf6a41
// created-on : 2025-03-13T14:22:01+01:00
// managed-by : https://github.com/dacr/code-examples-manager
// run-with : scala-cli $file
// ---------------------
//> using scala "3.6.4"
//> using dep "org.typelevel::cats-parse:1.1.0"
//> using dep "com.lihaoyi::pprint:0.9.0"
// ---------------------
import cats.parse.{Parser0, Parser}
import cats.parse.Rfc5234.{lwsp, alpha}
case class Who(name: String)
val whitespaces = Parser.charIn(" \t\n\r").void.rep.void
extension [A](p: Parser[A]) {
def token: Parser[A] = p <* (whitespaces|Parser.end)
}
val helloToken = Parser.ignoreCase("hello").token
val helloParser: Parser0[Option[Who]] = for {
_ <- helloToken
name <- alpha.rep.string.? <* whitespaces.?
} yield name.map(Who.apply)
val results = List(
"hello david",
"hello joe ",
"hello"
).map(s => helloParser.parseAll(s))
pprint.pprintln(results)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment