go
This commit is contained in:
32
go/src/go.gleam
Normal file
32
go/src/go.gleam
Normal file
@@ -0,0 +1,32 @@
|
||||
import gleam/result
|
||||
|
||||
pub type Player {
|
||||
Black
|
||||
White
|
||||
}
|
||||
|
||||
pub type Game {
|
||||
Game(
|
||||
white_captured_stones: Int,
|
||||
black_captured_stones: Int,
|
||||
player: Player,
|
||||
error: String,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn apply_rules(
|
||||
game: Game,
|
||||
rule1: fn(Game) -> Result(Game, String),
|
||||
rule2: fn(Game) -> Game,
|
||||
rule3: fn(Game) -> Result(Game, String),
|
||||
rule4: fn(Game) -> Result(Game, String),
|
||||
) -> Game {
|
||||
case rule2(game) |> rule1 |> result.try(rule3) |> result.try(rule4) {
|
||||
Error(err) -> Game(..game, error: err)
|
||||
Ok(g) ->
|
||||
case g.player {
|
||||
Black -> Game(..g, player: White)
|
||||
White -> Game(..g, player: Black)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user