Stream pipeline replacement: the pipeline version

The complete source of forAI_stream_replacement_after.ek9, compiled by the EK9 compiler. Shown on forAI.html.

#!ek9
defines module site.forAI.streamsafter

  defines class

    User
      name as String: String()
      active as Boolean: false
      recentLogin as Boolean: false

      User()
        ->
          name as String
          active as Boolean
          recentLogin as Boolean
        this.name :=: name
        this.active :=: active
        this.recentLogin :=: recentLogin

      isActive() as pure
        <- rtn as Boolean: active

      hasRecentLogin() as pure
        <- rtn as Boolean: recentLogin

      operator $ as pure
        <- rtn as String: name

      default operator ?

  defines function

    findActiveUsers()
      -> users as List of User
      <- active as List of User?

      active: cat users
        | filter by isActiveWithRecentLogin
        | collect as List of User

    isActiveWithRecentLogin() as pure
      -> user as User
      <- result as Boolean: user.isActive() and user.hasRecentLogin()

  defines program

    ActiveUsers()
      stdout <- Stdout()
      users <- [
        User(name: "ada", active: true, recentLogin: true),
        User(name: "bob", active: true, recentLogin: false),
        User(name: "cy", active: false, recentLogin: true)
        ]
      stdout.println($findActiveUsers(users))

Download forAI_stream_replacement_after.ek9

Output

[ada]