updateENet :: Player -> Board -> Board -> NNet -> NNet
updateENet p bo bt n = let
  playing = whichPlayersFrom p bo
  nextPlayer = cycle playing !! 1
  er = evaluate n nextPlayer bt
  mo = case length playing of
    3 -> map Just $ concatMap ((\(a,b) -> [a,b]) . (er M.!)) playing
    2 -> take 6 $
      concatMap ((\(_,b) -> [Nothing, Just b]) . (er M.!)) playing ++
      repeat Nothing
  ufs = map (\b ->
    backpropSome 0.1 (mapBoard p b) mo
   ) $ isomorphisms bo
  in foldl1' (.) ufs n
updateENet :: Player -> Board -> Board -> NNet -> NNet
updateENet p bo bt n = let
  playing = whichPlayersFrom p bo
  nextPlayer = cycle playing !! 1
  er = evaluate n nextPlayer bt
  mo = case length playing of
    3 -> map Just $ concatMap ((\(a,b) -> [a,b]) . (er M.!)) playing
    2 -> take 6 $
      concatMap ((\(_,b) -> [Nothing, Just b]) . (er M.!)) playing ++
      repeat Nothing
  ufs = map (\b ->
    backpropSome 0.1 (mapBoard p b) mo
   ) $ isomorphisms bo
  in foldl1' (.) ufs n
updateENet p bo bt n = let
  playing = whichPlayersFrom p bo
  nextPlayer = cycle playing !! 1
  er = evaluate n nextPlayer bt
  mo = case length playing of
    3 -> map Just $ concatMap ((\(a,b) -> [a,b]) . (er M.!)) playing
    2 -> take 6 $
      concatMap ((\(_,b) -> [Nothing, Just b]) . (er M.!)) playing ++
      repeat Nothing
  ufs = map (\b ->
    backpropSome 0.1 (mapBoard p b) mo
   ) $ isomorphisms bo
  in foldl1' (.) ufs n