private static MoveCandidate GetMoveCandidate(this Board board, Position origin, Direction direction) => board[origin].Match( number => new MoveCandidate(number, origin, board.FindMoveTarget(origin, direction)), () => new MoveCandidate(0, origin, Maybe <Position> .Nothing) );
public static Maybe <Position> FindMoveTarget(this Board board, Position position, Direction direction) => board[position].Match( number => board.FindMoveTarget(number, board.BuildPositionPairs(position, direction).ToArray()), () => Maybe <Position> .Nothing );