Skip to content

Conversation

@c42f
Copy link
Member

@c42f c42f commented Feb 17, 2023

Allow anonymous function syntax like ->_[1] to mean x->x[1] as discussed in JuliaLang/julia#38713

Exists in part of the same design space as #148

You can try this in the REPL by checking out this branch and using JuliaSyntax.enable_in_core!. For example:

julia> JuliaSyntax.enable_in_core!(freeze_world_age=false)

julia> data = [(a=1,b=2), (a=3,b=4)]
2-element Vector{NamedTuple{(:a, :b), Tuple{Int64, Int64}}}:
 (a = 1, b = 2)
 (a = 3, b = 4)

julia> filter(->_.a > 2, data)
1-element Vector{NamedTuple{(:a, :b), Tuple{Int64, Int64}}}:
 (a = 3, b = 4)

With this setup, you can also edit JuliaSyntax.jl to play with different lowering scenarios and see them almost immediately in the REPL using Revise. (May need to run a command twice for Revise to pick things up.)

Note that having lowering implemented here in Expr conversion is just for prototyping/experimentation. It would need to go into julia-syntax.scm in a real implementation.

Meta-commentary

One downside of this proposal (as a kind-of alternative to #148) is that we can't neatly express data filtering operations on rows of tabular data without naming the row, because the row is used multiple times:

julia> filter(row->row.a + row.b > 4, data)
1-element Vector{NamedTuple{(:a, :b), Tuple{Int64, Int64}}}:
 (a = 3, b = 4)

@c42f c42f changed the title Prototype: Underscores and prefix anonymous function syntax Prototype: Headless anonymous function syntax Feb 17, 2023
c42f added a commit that referenced this pull request Feb 18, 2023
c42f added a commit that referenced this pull request Feb 18, 2023
@c42f
Copy link
Member Author

c42f commented Feb 18, 2023

I've pushed an extra commit here which makes the _ always refer to the same, single anon function argument.

@c42f c42f marked this pull request as draft March 4, 2023 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant