Packages
lustre
1.1.0
5.7.1
5.7.0
5.6.0
5.5.2
5.5.1
5.5.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
5.2.1
5.2.0
5.1.1
5.1.0
5.0.3
5.0.2
5.0.1
5.0.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.0
4.0.0-rc1
4.0.0-rc.2
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.12
3.0.11
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.8
3.0.0-rc.7
3.0.0-rc.6
3.0.0-rc.5
3.0.0-rc.4
3.0.0-rc.3
3.0.0-rc.2
3.0.0-rc.1
2.0.1
2.0.0
1.3.0
1.2.0
1.1.0
1.0.0
Create HTML templates, single page applications, Web Components, and real-time server components in Gleam!
Current section
Files
Jump to
Current section
Files
src/lustre/cmd.gleam
// IMPORTS ---------------------------------------------------------------------
import gleam/list
// TYPES -----------------------------------------------------------------------
pub opaque type Cmd(action) {
Cmd(fn (fn (action) -> Nil) -> Nil, Cmd(action))
None
}
// CONSTRUCTORS ----------------------------------------------------------------
pub fn from (cmd: fn (fn (action) -> Nil) -> Nil) -> Cmd(action) {
Cmd(cmd, None)
}
pub fn none () -> Cmd(action) {
None
}
// MANIPULATIONS ---------------------------------------------------------------
pub fn batch (cmds: List(Cmd(action))) -> Cmd(action) {
cmds
|> list.flat_map(to_list)
|> list.fold_right(None, fn (rest, cmd) { Cmd(cmd, rest) })
}
pub fn map (cmd: Cmd(a), f: fn (a) -> b) -> Cmd(b) {
case cmd {
Cmd(cmd, next) ->
Cmd(fn (dispatch) {
cmd(fn (a) {
dispatch(f(a))
})
}, map(next, f))
None ->
None
}
}
// CONVERSIONS -----------------------------------------------------------------
pub fn to_list (cmd: Cmd(action)) -> List(fn (fn (action) -> Nil) -> Nil) {
case cmd {
Cmd(cmd, next) ->
[ cmd, ..to_list(next) ]
None ->
[]
}
}