Skip to content
/ functx Public

Tiny Gleam caching Context for your functions

Notifications You must be signed in to change notification settings

darky/functx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

functx

Package Version Hex Docs Erlang-compatible JavaScript-compatible

logo

Tiny Gleam caching Context for your functions

gleam add functx
import functx.{type Ctx}

fn nums(ctx: Ctx(Int)) {
  // this function called only once during context

  let #(n, _) = ctx

  #([1, 2, 3, 4, 5, 6, 7, 8, 9, n], ctx)
}

fn nums_as_string(ctx) {
  use ns, ctx <- functx.call(ctx, nums)

  let resp =
    ns
    |> list.map(fn(n) { n |> int.to_string })
    |> string.join(",")

  #(resp, ctx)
}

fn nums_to_sum(ctx) {
  use ns, ctx <- functx.call(ctx, nums)

  let resp = {
    use acc, n <- list.fold(ns, 0)
    acc + n
  }

  #(resp, ctx)
}

fn nums_summary(ctx) {
  use ns_str, ctx <- functx.call(ctx, nums_as_string)
  use ns_sum, ctx <- functx.call(ctx, nums_to_sum)

  let resp = "Nums: " <> ns_str <> " Sum: " <> ns_sum |> int.to_string

  #(resp, ctx)
}

pub fn main() {
  let resp =
    10
    |> functx.make_ctx
    |> nums_summary

  resp.0 // Nums: 1,2,3,4,5,6,7,8,9,10 Sum: 55
}

Further documentation can be found at https://hexdocs.pm/functx.

Development

gleam run   # Run the project
gleam test  # Run the tests
gleam shell # Run an Erlang shell

See also

  • context-fp - Functional programming context for TypeScript
  • context-fp-go - Functional programming context for Golang

About

Tiny Gleam caching Context for your functions

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages