/// <summary>TODO</summary>
 public static HexsideCosts EntryCosts <THex>(BoardStorage <Maybe <THex> > boardHexes, HexCoords hexCoords)
     where THex : IHex
 {
     return(new HexsideCosts(hexside => DirectedCost(boardHexes, hexCoords.GetNeighbour(hexside), hexside.Reversed)));
 }
 /// <summary>TODO</summary>
 public static short?DirectedCost <THex>(BoardStorage <Maybe <THex> > boardHexes, HexCoords hexCoords, Hexside hexside)
     where THex : IHex
 {
     return(boardHexes[hexCoords].Bind(hex => hex.TryStepCost(hexside).ToMaybe()).ToNullable());
 }
 /// <summary>TODO</summary>
 public static HexsideCosts ExitCosts <THex>(BoardStorage <Maybe <THex> > boardHexes, HexCoords hexCoords)
     where THex : IHex
 {
     return(new HexsideCosts(hexside => DirectedCost(boardHexes, hexCoords, hexside)));
 }