PBRYNWYOTORTAAYHMNGLU5KNAS4T5FCSEIWM656VQ7IZJ6P7NQ3QC
var $elm$core$Set$Set_elm_builtin = function (a) {
return {$: 'Set_elm_builtin', a: a};
};
var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'};
var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin;
var $elm$core$Set$empty = $elm$core$Set$Set_elm_builtin($elm$core$Dict$empty);
};
var $elm$core$Dict$Black = {$: 'Black'};
var $elm$core$Dict$RBNode_elm_builtin = F5(
function (a, b, c, d, e) {
return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e};
});
var $elm$core$Dict$Red = {$: 'Red'};
var $elm$core$Dict$balance = F5(
function (color, key, value, left, right) {
if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) {
var _v1 = right.a;
var rK = right.b;
var rV = right.c;
var rLeft = right.d;
var rRight = right.e;
if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
var _v3 = left.a;
var lK = left.b;
var lV = left.c;
var lLeft = left.d;
var lRight = left.e;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Red,
key,
value,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight));
} else {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
color,
rK,
rV,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft),
rRight);
}
} else {
if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) {
var _v5 = left.a;
var lK = left.b;
var lV = left.c;
var _v6 = left.d;
var _v7 = _v6.a;
var llK = _v6.b;
var llV = _v6.c;
var llLeft = _v6.d;
var llRight = _v6.e;
var lRight = left.e;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Red,
lK,
lV,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right));
} else {
return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right);
}
}
});
var $elm$core$Basics$compare = _Utils_compare;
var $elm$core$Dict$insertHelp = F3(
function (key, value, dict) {
if (dict.$ === 'RBEmpty_elm_builtin') {
return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin);
} else {
var nColor = dict.a;
var nKey = dict.b;
var nValue = dict.c;
var nLeft = dict.d;
var nRight = dict.e;
var _v1 = A2($elm$core$Basics$compare, key, nKey);
switch (_v1.$) {
case 'LT':
return A5(
$elm$core$Dict$balance,
nColor,
nKey,
nValue,
A3($elm$core$Dict$insertHelp, key, value, nLeft),
nRight);
case 'EQ':
return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight);
default:
return A5(
$elm$core$Dict$balance,
nColor,
nKey,
nValue,
nLeft,
A3($elm$core$Dict$insertHelp, key, value, nRight));
}
}
});
var $elm$core$Dict$insert = F3(
function (key, value, dict) {
var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict);
if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
var _v1 = _v0.a;
var k = _v0.b;
var v = _v0.c;
var l = _v0.d;
var r = _v0.e;
return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
} else {
var x = _v0;
return x;
}
});
var $elm$core$Set$insert = F2(
function (key, _v0) {
var dict = _v0.a;
return $elm$core$Set$Set_elm_builtin(
A3($elm$core$Dict$insert, key, _Utils_Tuple0, dict));
});
var $elm$core$Dict$getMin = function (dict) {
getMin:
while (true) {
if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
var left = dict.d;
var $temp$dict = left;
dict = $temp$dict;
continue getMin;
} else {
return dict;
}
}
var $elm$core$Dict$moveRedLeft = function (dict) {
if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
if ((dict.e.d.$ === 'RBNode_elm_builtin') && (dict.e.d.a.$ === 'Red')) {
var clr = dict.a;
var k = dict.b;
var v = dict.c;
var _v1 = dict.d;
var lClr = _v1.a;
var lK = _v1.b;
var lV = _v1.c;
var lLeft = _v1.d;
var lRight = _v1.e;
var _v2 = dict.e;
var rClr = _v2.a;
var rK = _v2.b;
var rV = _v2.c;
var rLeft = _v2.d;
var _v3 = rLeft.a;
var rlK = rLeft.b;
var rlV = rLeft.c;
var rlL = rLeft.d;
var rlR = rLeft.e;
var rRight = _v2.e;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Red,
rlK,
rlV,
A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Black,
k,
v,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
rlL),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rlR, rRight));
} else {
var clr = dict.a;
var k = dict.b;
var v = dict.c;
var _v4 = dict.d;
var lClr = _v4.a;
var lK = _v4.b;
var lV = _v4.c;
var lLeft = _v4.d;
var lRight = _v4.e;
var _v5 = dict.e;
var rClr = _v5.a;
var rK = _v5.b;
var rV = _v5.c;
var rLeft = _v5.d;
var rRight = _v5.e;
if (clr.$ === 'Black') {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Black,
k,
v,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
} else {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Black,
k,
v,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
}
}
} else {
return dict;
}
};
var $elm$core$Dict$moveRedRight = function (dict) {
if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
if ((dict.d.d.$ === 'RBNode_elm_builtin') && (dict.d.d.a.$ === 'Red')) {
var clr = dict.a;
var k = dict.b;
var v = dict.c;
var _v1 = dict.d;
var lClr = _v1.a;
var lK = _v1.b;
var lV = _v1.c;
var _v2 = _v1.d;
var _v3 = _v2.a;
var llK = _v2.b;
var llV = _v2.c;
var llLeft = _v2.d;
var llRight = _v2.e;
var lRight = _v1.e;
var _v4 = dict.e;
var rClr = _v4.a;
var rK = _v4.b;
var rV = _v4.c;
var rLeft = _v4.d;
var rRight = _v4.e;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Red,
lK,
lV,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Black,
k,
v,
lRight,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)));
} else {
var clr = dict.a;
var k = dict.b;
var v = dict.c;
var _v5 = dict.d;
var lClr = _v5.a;
var lK = _v5.b;
var lV = _v5.c;
var lLeft = _v5.d;
var lRight = _v5.e;
var _v6 = dict.e;
var rClr = _v6.a;
var rK = _v6.b;
var rV = _v6.c;
var rLeft = _v6.d;
var rRight = _v6.e;
if (clr.$ === 'Black') {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Black,
k,
v,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
} else {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
$elm$core$Dict$Black,
k,
v,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
}
}
} else {
return dict;
}
};
var $elm$core$Dict$removeHelpPrepEQGT = F7(
function (targetKey, dict, color, key, value, left, right) {
if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
var _v1 = left.a;
var lK = left.b;
var lV = left.c;
var lLeft = left.d;
var lRight = left.e;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
color,
lK,
lV,
lLeft,
A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, lRight, right));
} else {
_v2$2:
while (true) {
if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Black')) {
if (right.d.$ === 'RBNode_elm_builtin') {
if (right.d.a.$ === 'Black') {
var _v3 = right.a;
var _v4 = right.d;
var _v5 = _v4.a;
return $elm$core$Dict$moveRedRight(dict);
} else {
break _v2$2;
}
} else {
var _v6 = right.a;
var _v7 = right.d;
return $elm$core$Dict$moveRedRight(dict);
}
} else {
break _v2$2;
}
}
return dict;
}
});
var $elm$core$Dict$removeMin = function (dict) {
if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
var color = dict.a;
var key = dict.b;
var value = dict.c;
var left = dict.d;
var lColor = left.a;
var lLeft = left.d;
var right = dict.e;
if (lColor.$ === 'Black') {
if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
var _v3 = lLeft.a;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
color,
key,
value,
$elm$core$Dict$removeMin(left),
right);
} else {
var _v4 = $elm$core$Dict$moveRedLeft(dict);
if (_v4.$ === 'RBNode_elm_builtin') {
var nColor = _v4.a;
var nKey = _v4.b;
var nValue = _v4.c;
var nLeft = _v4.d;
var nRight = _v4.e;
return A5(
$elm$core$Dict$balance,
nColor,
nKey,
nValue,
$elm$core$Dict$removeMin(nLeft),
nRight);
} else {
return $elm$core$Dict$RBEmpty_elm_builtin;
}
}
} else {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
color,
key,
value,
$elm$core$Dict$removeMin(left),
right);
}
} else {
return $elm$core$Dict$RBEmpty_elm_builtin;
}
};
var $elm$core$Dict$removeHelp = F2(
function (targetKey, dict) {
if (dict.$ === 'RBEmpty_elm_builtin') {
return $elm$core$Dict$RBEmpty_elm_builtin;
} else {
var color = dict.a;
var key = dict.b;
var value = dict.c;
var left = dict.d;
var right = dict.e;
if (_Utils_cmp(targetKey, key) < 0) {
if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Black')) {
var _v4 = left.a;
var lLeft = left.d;
if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
var _v6 = lLeft.a;
return A5(
$elm$core$Dict$RBNode_elm_builtin,
color,
key,
value,
A2($elm$core$Dict$removeHelp, targetKey, left),
right);
} else {
var _v7 = $elm$core$Dict$moveRedLeft(dict);
if (_v7.$ === 'RBNode_elm_builtin') {
var nColor = _v7.a;
var nKey = _v7.b;
var nValue = _v7.c;
var nLeft = _v7.d;
var nRight = _v7.e;
return A5(
$elm$core$Dict$balance,
nColor,
nKey,
nValue,
A2($elm$core$Dict$removeHelp, targetKey, nLeft),
nRight);
} else {
return $elm$core$Dict$RBEmpty_elm_builtin;
}
}
} else {
return A5(
$elm$core$Dict$RBNode_elm_builtin,
color,
key,
value,
A2($elm$core$Dict$removeHelp, targetKey, left),
right);
}
} else {
return A2(
$elm$core$Dict$removeHelpEQGT,
targetKey,
A7($elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right));
}
}
});
var $elm$core$Dict$removeHelpEQGT = F2(
function (targetKey, dict) {
if (dict.$ === 'RBNode_elm_builtin') {
var color = dict.a;
var key = dict.b;
var value = dict.c;
var left = dict.d;
var right = dict.e;
if (_Utils_eq(targetKey, key)) {
var _v1 = $elm$core$Dict$getMin(right);
if (_v1.$ === 'RBNode_elm_builtin') {
var minKey = _v1.b;
var minValue = _v1.c;
return A5(
$elm$core$Dict$balance,
color,
minKey,
minValue,
left,
$elm$core$Dict$removeMin(right));
} else {
return $elm$core$Dict$RBEmpty_elm_builtin;
}
} else {
return A5(
$elm$core$Dict$balance,
color,
key,
value,
left,
A2($elm$core$Dict$removeHelp, targetKey, right));
}
} else {
return $elm$core$Dict$RBEmpty_elm_builtin;
}
});
var $elm$core$Dict$remove = F2(
function (key, dict) {
var _v0 = A2($elm$core$Dict$removeHelp, key, dict);
if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
var _v1 = _v0.a;
var k = _v0.b;
var v = _v0.c;
var l = _v0.d;
var r = _v0.e;
return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
} else {
var x = _v0;
return x;
}
});
var $elm$core$Set$remove = F2(
function (key, _v0) {
var dict = _v0.a;
return $elm$core$Set$Set_elm_builtin(
A2($elm$core$Dict$remove, key, dict));
});
return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
switch (msg.$) {
case 'AddQueen':
var i = msg.a;
var j = msg.b;
return _Utils_Tuple2(
_Utils_update(
model,
{
queens: A2(
$elm$core$Set$insert,
_Utils_Tuple2(i, j),
model.queens)
}),
$elm$core$Platform$Cmd$none);
case 'RemoveQueen':
var i = msg.a;
var j = msg.b;
return _Utils_Tuple2(
_Utils_update(
model,
{
queens: A2(
$elm$core$Set$remove,
_Utils_Tuple2(i, j),
model.queens)
}),
$elm$core$Platform$Cmd$none);
default:
return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
}
});
var $author$project$Queens$AddQueen = F2(
function (a, b) {
return {$: 'AddQueen', a: a, b: b};
});
var $author$project$Queens$RemoveQueen = F2(
function (a, b) {
return {$: 'RemoveQueen', a: a, b: b};
var $elm$svg$Svg$foreignObject = $elm$svg$Svg$trustedNode('foreignObject');
var $elm$html$Html$Attributes$height = function (n) {
return A2(
_VirtualDom_attribute,
'height',
$elm$core$String$fromInt(n));
};
var $elm$svg$Svg$Attributes$height = _VirtualDom_attribute('height');
var $elm$html$Html$img = _VirtualDom_node('img');
var $elm$virtual_dom$VirtualDom$Normal = function (a) {
return {$: 'Normal', a: a};
};
var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
var $elm$html$Html$Events$on = F2(
function (event, decoder) {
return A2(
$elm$virtual_dom$VirtualDom$on,
event,
$elm$virtual_dom$VirtualDom$Normal(decoder));
});
var $elm$svg$Svg$Events$onClick = function (msg) {
return A2(
$elm$html$Html$Events$on,
'click',
$elm$json$Json$Decode$succeed(msg));
};
var $elm$json$Json$Encode$string = _Json_wrap;
var $elm$html$Html$Attributes$stringProperty = F2(
function (key, string) {
return A2(
_VirtualDom_property,
key,
$elm$json$Json$Encode$string(string));
});
var $elm$html$Html$Attributes$src = function (url) {
return A2(
$elm$html$Html$Attributes$stringProperty,
'src',
_VirtualDom_noJavaScriptOrHtmlUri(url));
};
var queen = function (_v0) {
var i = _v0.a;
var j = _v0.b;
return A2(
$elm$svg$Svg$foreignObject,
_List_fromArray(
[
$elm$svg$Svg$Attributes$width('20'),
$elm$svg$Svg$Attributes$height('20'),
$elm$svg$Svg$Attributes$x(
$elm$core$String$fromInt(i * 20)),
$elm$svg$Svg$Attributes$y(
$elm$core$String$fromInt(j * 20)),
$elm$svg$Svg$Events$onClick(
A2($author$project$Queens$RemoveQueen, i, j))
]),
_List_fromArray(
[
A2(
$elm$html$Html$img,
_List_fromArray(
[
$elm$html$Html$Attributes$width(20),
$elm$html$Html$Attributes$height(20),
$elm$html$Html$Attributes$src('static/queen.svg')
]),
_List_Nil)
]));
};
var border = _List_fromArray(
[
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('0'),
$elm$svg$Svg$Attributes$y1('0'),
$elm$svg$Svg$Attributes$x2('160'),
$elm$svg$Svg$Attributes$y2('0'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil),
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('160'),
$elm$svg$Svg$Attributes$y1('0'),
$elm$svg$Svg$Attributes$x2('160'),
$elm$svg$Svg$Attributes$y2('160'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil),
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('160'),
$elm$svg$Svg$Attributes$y1('160'),
$elm$svg$Svg$Attributes$x2('0'),
$elm$svg$Svg$Attributes$y2('160'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil),
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('0'),
$elm$svg$Svg$Attributes$y1('160'),
$elm$svg$Svg$Attributes$x2('0'),
$elm$svg$Svg$Attributes$y2('0'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil)
]);
_List_fromArray(
[
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('0'),
$elm$svg$Svg$Attributes$y1('0'),
$elm$svg$Svg$Attributes$x2('160'),
$elm$svg$Svg$Attributes$y2('0'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil),
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('160'),
$elm$svg$Svg$Attributes$y1('0'),
$elm$svg$Svg$Attributes$x2('160'),
$elm$svg$Svg$Attributes$y2('160'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil),
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('160'),
$elm$svg$Svg$Attributes$y1('160'),
$elm$svg$Svg$Attributes$x2('0'),
$elm$svg$Svg$Attributes$y2('160'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil),
A2(
$elm$svg$Svg$line,
_List_fromArray(
[
$elm$svg$Svg$Attributes$x1('0'),
$elm$svg$Svg$Attributes$y1('160'),
$elm$svg$Svg$Attributes$x2('0'),
$elm$svg$Svg$Attributes$y2('0'),
$elm$svg$Svg$Attributes$stroke('black')
]),
_List_Nil)
])));
_Utils_ap(
border,
A2(
$elm$core$List$map,
queen,
$elm$core$Set$toList(model.queens)))));
queen (i, j) = Svg.foreignObject
[ Attr.width "20"
, Attr.height "20"
, Attr.x <| String.fromInt (i * 20)
, Attr.y <| String.fromInt (j * 20)
, Events.onClick (RemoveQueen i j)
]
<|
[ img
[ width 20
, height 20
, src "static/queen.svg"
]
[]
]
border =
[ Svg.line
[ Attr.x1 "0"
, Attr.y1 "0"
, Attr.x2 "160"
, Attr.y2 "0"
, Attr.stroke "black"
]
[]
, Svg.line
[ Attr.x1 "160"
, Attr.y1 "0"
, Attr.x2 "160"
, Attr.y2 "160"
, Attr.stroke "black"
]
[]
, Svg.line
[ Attr.x1 "160"
, Attr.y1 "160"
, Attr.x2 "0"
, Attr.y2 "160"
, Attr.stroke "black"
]
[]
, Svg.line
[ Attr.x1 "0"
, Attr.y1 "160"
, Attr.x2 "0"
, Attr.y2 "0"
, Attr.stroke "black"
]
[]
]
<| List.map square (squares 8)
++
[ Svg.line
[ Attr.x1 "0"
, Attr.y1 "0"
, Attr.x2 "160"
, Attr.y2 "0"
, Attr.stroke "black"
]
[]
, Svg.line
[ Attr.x1 "160"
, Attr.y1 "0"
, Attr.x2 "160"
, Attr.y2 "160"
, Attr.stroke "black"
]
[]
, Svg.line
[ Attr.x1 "160"
, Attr.y1 "160"
, Attr.x2 "0"
, Attr.y2 "160"
, Attr.stroke "black"
]
[]
, Svg.line
[ Attr.x1 "0"
, Attr.y1 "160"
, Attr.x2 "0"
, Attr.y2 "0"
, Attr.stroke "black"
]
[]
]
<| List.map square (squares 8) ++ border ++ (List.map queen <| Set.toList model.queens)