• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

A categorical programming language


Commit MetaInfo

Revision6a8366ee56760ce851c638da2089f149632957bc (tree)
Zeit2023-04-03 15:18:56
AutorCorbin <cds@corb...>
CommiterCorbin

Log Message

Print basic descriptions of arrows.

Ändern Zusammenfassung

Diff

--- a/hive.json
+++ b/hive.json
@@ -1 +1 @@
1-{"jets":{"dup":["pair","id","id"],"app":["uncurry","id"],"n-pred-maybe":["pr","right",["comp",["case","succ","zero"],"left"]],"n-add":["uncurry",["pr",["curry","snd"],["curry",["comp","app","succ"]]]],"n-mul":["uncurry",["pr",["curry",["comp","ignore","zero"]],["curry",["comp",["pair","app","snd"],"n-add"]]]],"n-double":["pr","zero",["comp","succ","succ"]]},"symbols":{"tree/singleton":[1480,""],"array/split":[1470,""],"tree/tip":[1452,""],"bool/conj":[1451,""],"conal/delta":[1440,""],"conal/derivative":[1414,""],"conal/nullable":[1410,""],"f/0.05":[1409,""],"f/1.75":[1407,""],"hv2rgb":[85,"\n\nConvert a hue/value pair to a red/green/blue triple. The components are based\non the hue, then scaled by the value.\n"],"zoom-out":[107,""],"in-ellipse?":[122,""],"fstsnd":[28,""],"3b1b-newton-poly":[140,""],"sndfst":[25,""],"subset-range":[182,""],"hailstone":[234,""],"nat-mul3":[229,""],"int-fractal-maybe":[253,"\n\nLike fractal-maybe, but internal.\n"],"snoc":[255,""],"app":[63,""],"mogensen-eval":[260,""],"f-succ":[262,""],"erdos-primitive-sequence":[326,""],"stay-zoomed-out":[329,"\n"],"either-cyan-or-black":[333,""],"repeating-circles":[341,""],"f-double":[343,""],"sndsnd":[29,""],"shift-by-4":[98,"\n"],"burning-ship-detail":[381,"\n\nA nice closeup of a self-similar instance of the Burning Ship fractal along\nthe main line.\n"],"h2rgb":[75,"\n\nConvert a hue to its red, green, and blue components.\n"],"fstfst":[24,""],"fib-dyn":[382,"\n\nThe dynamics of the Fibonacci sequence.\n"],"continued-logarithm":[393,""],"odd-numbers":[394,""],"step-comp":[401,"\n\n([Y x N, Z x N + N] x [X x N, Y x N + N]) x (X x N) -> Z x N + N\n\n[Y x N, Z x N + N] x [X x N, Y x N + N] -> [X x N, Z x N + N]\n"],"triang":[404,""],"setup-step-fractal":[411,"\n\nConvert an iterative fractal to count steps until it diverges.\n"],"advance-lentz-coeffs":[429,""],"list-choose":[437,""],"enclosing":[454,"\n\nThe smallest AABB enclosing two AABBs.\n"],"morton-spread":[458,""],"bool-sum":[204,""],"nat-div2":[210,""],"3b1b-horner":[483,""],"sdf2d":[490,"\n"],"f-halve":[492,""],"app-pair-at-point":[494,""],"int/succ":[499,"\n\nThe successor of an integer.\n"],"int/abs":[500,"\n\nThe absolute value of an integer.\n"],"int/neg":[501,"\n\nThe negation of an integer.\n"],"int/zero":[502,"\n\nThe integer zero. For no particular reason, we choose positive zero.\n"],"int/zero?":[503,"\n\nWhether an integer is zero.\n"],"monoids/mul/add":[228,""],"monoids/mul/zero":[344,""],"monoids/endo/add":[507,"\n\nAddition in an endomorphism monoid.\n"],"monoids/endo/zero":[57,"\n\nThe zero of an endomorphism monoid.\n"],"monoids/add/add":[224,""],"monoids/add/zero":[141,""],"sdf3/sphere":[516,""],"nat/20":[352,""],"nat/256":[525,"\n"],"nat/pred-maybe":[160,"\n\nThe predecessor of a natural number, or a distinguished point for zero.\n"],"nat/mul":[228,"\n"],"nat/odd?":[526,"\n\nWhether a natural number is odd.\n"],"nat/3":[215,"\n"],"nat/sum":[527,"\n\nThe sum of a list of natural numbers.\n"],"nat/sum-of-sqr":[533,"\n\nThe sum of squares of natural numbers up to (but not including) the input.\n"],"nat/add":[224,"\n\nAddition of two natural numbers.\n"],"nat/exp":[524,"\n"],"nat/monus":[537,"\n"],"nat/1":[344,""],"nat/to-f":[313,"\n\nConvert a unary natural number to a floating-point number. The conversion uses\nbinary as an intermediate step to allow construction of large numbers.\n"],"nat/pred":[162,"\n\nThe predecessor of a natural number. Zero is mapped to itself.\n"],"nat/5":[348,"\n"],"nat/double-alt":[351,"\n\nDouble a natural number by counting every successor operation twice.\n"],"nat/64":[540,"\n"],"nat/fact":[546,"\n\nThe factorial function on natural numbers.\n"],"nat/7":[359,"\n"],"nat/leonardo":[548,""],"nat/lt-eq?":[557,"\n\nThe less-than-or-equal relation on natural numbers.\n"],"nat/eq?":[168,"\n\nEquality on natural numbers is decidable.\n"],"nat/4":[361,"\n"],"nat/2":[214,"\n"],"nat/fib":[548,""],"nat/double":[349,"\n\nDouble a natural number by adding it to itself.\n"],"nat/100":[369,""],"nat/horner":[567,"\n\nEvaluate a polynomial in the natural numbers with Horner's rule.\n"],"nat/9":[569,"\n"],"nat/32":[539,"\n"],"nat/cube":[573,"\n\nThe cube of a natural number.\n"],"nat/16":[538,"\n"],"nat/sqr":[368,"\n\n\n"],"nat/zero?":[153,"\n\nWhether a natural number is zero.\n"],"nat/sqr-of-sum":[575,"\n\nThe square of the sum of the natural numbers up to (but not including) the\ninput.\n"],"nat/rem":[585,""],"nat/rshift":[595,"\n\nShift all of the bits in a natural number towards the least-significant bit.\nThe least-significant bit itself is also returned.\n"],"nat/10":[350,"\n"],"nat/81":[597,"\n\n\n"],"nat/pot":[600,"\n\nThe powers of two.\n"],"nat/8":[517,"\n"],"nat/sylvester":[604,""],"nat/even?":[184,"\n\nWhether a natural number is even. Zero is even.\n"],"magma/square":[608,"\n\nA magma can be squared to produce an endomorphism.\n"],"magma/braid":[612,"\n\nBraid a magma, obtaining its opposite magma.\n"],"poly/deriv":[624,"\n\nThe derivative of a polynomial, which itself is a polynomial.\n"],"poly/nice-deriv":[626,""],"poly/zero":[127,"\n\nThe zero polynomial.\n"],"poly/order":[629,"\n\nThe largest exponent in a polynomial. \n"],"poly/const":[430,"\n\nA constant polynomial which always evaluating to the given natural number.\n"],"combinators/k":[630,""],"combinators/s":[635,""],"combinators/w":[639,""],"fun/distribr":[198,"\n\nDistribute to the right.\n"],"fun/int-comp":[507,"\n\nAn internalized version of composition.\n"],"fun/app":[63,"\n\nApply a function to a value.\n\nIn categorical jargon, this is the [evaluation\nmap](https://ncatlab.org/nlab/show/evaluation%20map).\n"],"fun/int-flip":[643,"\n"],"fun/factorr":[645,"\n\nFactor out a product from a sum.\n"],"fun/factorl":[649,"\n\nFactor out a product from a sum.\n"],"fun/distribl":[193,"\n\nDistribute to the left.\n"],"double/to-pair":[651,"\n\nConvert a double value to a pair containing a Boolean tag indicating which\nside of the double the value occupies.\n"],"double/merge":[500,"\n\nEither side of a double.\n"],"double/from-pair":[658,"\n\nConvert a pair into a double, where the first component of the pair is the\nelement to embed and the second component is a Boolean tag indicating which\nside of the sum to occupy.\n"],"baire/omega":[1,"\n\nAs a non-standard natural number, $\\omega$ is the smallest natural number\ngreater than all standard natural numbers.\n"],"baire/add":[660,"\n\nAddition of non-standard natural numbers in Baire space.\n"],"list/every-other":[676,""],"list/reverse-onto":[297,"\n\nReverse a list onto an input suffix.\n"],"list/zip":[699,"\n\nZip two lists together.\n"],"list/nil?":[700,"\n\nWhether a list is nil.\n"],"list/head":[701,"\n\nThe most exterior constructed value in a list, if it exists.\n"],"list/repeat":[708,"\n"],"list/flatten":[709,"\n\nFlatten a list of lists into a single list.\n"],"list/append":[435," \n\nConcatenate two lists into a single list.\n"],"list/evens":[715,"\n\n\n"],"list/reverse":[298,"\n\nReverse a list in linear time.\n"],"list/gauss":[716,"\n"],"list/flatmap":[709,""],"list/uncons":[686,"\n\nTry to decompose a list at its extremal cell.\n"],"list/cat_maybes":[719,"\n\nSelect the left-hand elements of a list of sums.\n"],"list/drop":[725,""],"list/double":[728,"\n\nRepeat each value in a list twice.\n"],"list/singleton":[430,"\n\nA list with only one value.\n"],"list/tail":[720,"\n\nThe tail of a list. The tail of the empty list is the empty list.\n"],"list/len":[628,"\n"],"list/tails":[737,""],"list/pair":[742,"\n\nZip a single value into a list.\n"],"list/range":[147,"\n"],"bool/pick":[252,"\n"],"bool/all?":[743,"\n\nWhether every element in a list is true.\n"],"bool/popcount":[748,"\n\nThe number of set bits in a list of bits.\n"],"bool/parity":[749,"\n\nThe parity of a list of bits.\n"],"bool/half-adder":[270,"\n\nAdd two bits, returning a pair of the result and carry bit.\n"],"bool/any?":[750,"\n\nWhether any element in a list is true.\n"],"bool/xor":[269,"\n\nThe exclusive-or operation, also known as the parity operation.\n"],"sdf2/circle":[752,"\n\n\n"],"draw/complex-fun":[765,"\n\nMap a complex number to a color. The magnitude is mapped to luminance and the\nangle is mapped to hue.\n"],"mat2/mul":[777,"\n\nMultiply two matrices.\n"],"mat2/vec":[772,"\n\nApply a matrix to a column vector.\n"],"mat2/trans":[767,"\n\nTranspose a matrix.\n"],"mat2/rotate":[783,""],"mat2/id":[785,"\n\nAn identity matrix.\n"],"square/to-pair":[788,"\n\nConvert a square to a pair.\n"],"square/from-pair":[790,"\n\nConvert a pair to a square.\n"],"extnat/succ":[791,"\n\nThe successor of an extended natural number is also an extended natural\nnumber.\n"],"extnat/pred":[806,"\n\nThe predecessor of an extended natural number. The extra point signals when\nthe input is zero.\n"],"nonempty/unfold":[817,"\n"],"nonempty/to-list":[129,"\n\nA nonempty list is a list.\n"],"fps/add":[822,"\n\nThe sum of two formal power series.\n"],"fps/diff":[826,"\n\nThe formal derivative of a formal power series.\n"],"fps/extract":[827,"\n\nExtract a coefficient from a formal power series.\n"],"fps/zero":[829,"\n\nThe zero formal power series.\n"],"weekend/image1":[833,"\n\nCode for Image 1. The viewport is from (0,0) to (1,1), but flipped\nupside-down.\n\nWhen rendering this image, flip the viewport like:\n\n 0.0 1.0 1.0 0.0\n"],"weekend/finish-quadratic2":[849,"\n\nCompute the quadratic formula, replacing $b$ with $h$ where $b = 2h$.\n"],"weekend/image2":[893,""],"weekend/image4":[933,"\n"],"weekend/discriminant":[938,"\n\nCompute the discriminant for the quadratic formula.\n"],"weekend/aim-ray":[855,""],"weekend/ray_color4":[932,"\n\n\n"],"weekend/ray_color3":[956,"\n\n\n"],"weekend/ray_color":[892,"\n"],"weekend/ray_at":[917,"\n\nAdvance a ray in time. The ray is given as a pair of origin and direction.\n"],"weekend/make-normal":[919,""],"weekend/ray_color2":[970,"\n\n\n"],"weekend/image3":[971,"\n"],"weekend/sphere_center":[894,""],"weekend/finish-quadratic":[953,"\n\nCompute the quadratic formula.\n"],"weekend/origin":[331,""],"weekend/sky":[879,"\n"],"weekend/discriminant2":[838,"\n\nCompute the discriminant for the quadratic formula. Note that $b$ is replaced\nwith $h$, where $b = 2h$.\n"],"comonads/store/duplicate":[973,""],"comonads/store/counit":[63,"\n"],"comonads/product/duplicate":[974,"\n"],"comonads/product/counit":[12,"\n"],"demo/burning-ship-color":[1008,"\n\nDraw membership for the [Burning Ship\nfractal](https://en.wikipedia.org/wiki/Burning_Ship_fractal), a relative of\nthe Mandelbrot set.\n"],"demo/metaball":[1036,"\n\n\n"],"demo/red-ellipse":[1039,"\n\n\n"],"demo/burning-ship-fast":[1080,"\n\nDraw membership for the [Burning Ship\nfractal](https://en.wikipedia.org/wiki/Burning_Ship_fractal), a relative of\nthe Mandelbrot set.\n"],"demo/mandelbrot":[1100,"\n\nDraw membership in the [Mandelbrot\nset](https://en.wikipedia.org/wiki/Mandelbrot_set).\n"],"demo/burning-ship":[1113,"\n\nDraw membership for the [Burning Ship\nfractal](https://en.wikipedia.org/wiki/Burning_Ship_fractal), a relative of\nthe Mandelbrot set.\n"],"demo/deco-circles":[1114,""],"demo/anim/red-ellipse":[1118,""],"demo/anim/hue":[1119,""],"demo/anim/ellipse-color":[1128,"\n\n\n"],"demo/anim/max-headroom":[1138,"\n"],"demo/anim/deco-circles":[1141,"\n"],"demo/anim/jupiter-storm":[1153,"\n\nA variation on the classic \"Jupiter Storm\" demo effect.\n"],"v2/polar":[1154,"\n\nConvert from rectangular coordinates to polar coordinates on the Cartesian\nplane.\n"],"v2/mandelbrot":[1086,"\n\nPerform a Mandelbrot iteration. The Mandelbrot set is composed of points\nwhich do not diverge under iteration.\n"],"v2/burning-ship":[987,"\n\nAn iteration of the Burning Ship fractal, a relative of the Mandelbrot set.\n"],"v2/scale-by":[105,""],"v2/rotate-by":[1117,""],"v2/complex/mag-2?":[242,"\n\nWhether a complex number's magnitude is less than 2.\n"],"v2/complex/norm":[240,"\n\nThe norm of a complex number.\n"],"v2/complex/mul":[474,"\n"],"v2/complex/sqrt":[1172,"\n\nThe principal square root of a complex number.\n"],"v2/complex/add":[32,""],"v2/complex/exp":[1180,"\n\nThe exponential function in the complex plane.\n"],"v2/complex/i":[784,"\n\nThe imaginary unit $i$. By convention, multiplication by $i$ corresponds to a\nquarter turn counterclockwise on the Cartesian plane.\n"],"v2/complex/one":[123,""],"v2/complex/conjugate":[314,""],"v2/complex/horner":[482,""],"v2/complex/zero":[124,""],"v2/complex/sqr":[983,"\n\n\n"],"v2/dual/mul":[1183,"\n\nMultiplication in the dual numbers.\n"],"v2/dual/e":[784,"\n\nThe epsilon unit.\n"],"v3/dot":[511,"\n\nDot product of two vectors.\n"],"v3/norm":[513,"\n\nThe length of a vector.\n"],"v3/mul":[84,"\n"],"v3/add":[34,"\n"],"v3/int-scale":[861,"\n\nScale a vector by a varying amount.\n"],"v3/sub":[898,"\n"],"v3/div":[1188,"\n"],"v3/normalise":[862,"\n\nA unit vector which points in the same direction as the input vector.\n"],"v3/centre":[1196,"\n\nThe center of an AABB.\n"],"v3/length_squared":[512,"\n\nThe positive square of the length of a vector.\n"],"v3/cross":[1223,"\n\nThe cross product of two vectors.\n"],"v3/rgb/black":[331,"\n\nThe least saturated color possible.\n"],"v3/rgb/cyan":[330,""],"v3/rgb/green":[1224,""],"v3/rgb/blue":[1225,""],"v3/rgb/red":[961,""],"v3/rgb/white":[884,"\n\nThe most saturated color which can reliably be displayed.\n"],"f/3":[10,"\n\nThree.\n"],"f/radians-to-turns":[759,"\n\nConvert radians to turns.\n"],"f/sum":[1226,"\n\nAn uncompensated sum of a list of floating-point numbers.\n"],"f/sub3":[1233,"\n\nSubtraction of two three-dimensional vectors.\n"],"f/product":[1234,""],"f/ln":[322,""],"f/abs":[64,"\n\nThe absolute value of a floating-point number.\n"],"f/sub":[315,"\n\nSubtraction of floating-point numbers.\n"],"f/5":[1144,""],"f/min":[439,"\n\nThe minimum of two floating-point numbers.\n"],"f/add2":[32,"\n\nAddition of two-dimensional vectors.\n"],"f/max":[447,"\n"],"f/e":[1235,"\n\nEuler's constant.\n"],"f/div":[17,"\n\nDivide two floating-point numbers. Division by zero yields:\n\n* $\\infty$ for positive dividends\n* $-\\infty$ for negative dividends\n* $\\pm 0$ for zero dividends\n\nSigns are respected; the result is negative when exactly one input is\nnegative, and positive otherwise.\n"],"f/euclidean3":[1236,"\n\nThe Euclidean distance between two three-dimensional vectors.\n"],"f/2pi":[756,"\n\nThe constant $2\\pi$, sometimes called $\\tau$.\n"],"f/invert-interval":[869,""],"f/eq?":[1240,""],"f/-1":[125,""],"f/4":[109,"\n\nFour.\n"],"f/mad":[423,""],"f/2":[8,"\n\nTwo.\n"],"f/add3":[34,"\n\nAddition of three-dimensional vectors.\n"],"f/negate3":[1230,"\n\nNegate a three-dimensional vector.\n"],"f/9":[91,"\n\nNine.\n"],"f/ln2":[1241,""],"f/dot2":[235,"\n\nThe dot product of two two-dimensional vectors.\n"],"f/cube":[1243,"\n\nThe cube of a floating-point number.\n"],"f/sqrt-pos":[239,"\n\nThe square root of a floating-point number, clamped to zero for negative\ninputs.\n"],"f/sqr":[90,"\n\nThe square of a floating-point number.\n"],"f/fract":[44,"\n\nThe fractional component of a floating-point number.\n"],"f/inf":[319,"\n"],"f/10":[1245,"\n\nTen.\n"],"f/half":[337,"\n\nOne half.\n"],"f/0.7":[876,"\n"],"f/disc-to-interval":[866,""],"f/1000":[1246,"\n\nOne thousand.\n"],"f/dot3":[511,"\n\nThe dot product of two three-dimensional vectors.\n"],"monads/maybe/int-bind":[1248,"\n\nAn internal version of bind for the maybe monad.\n"],"monads/maybe/unit":[158,"\n\nThe unit of the maybe monad.\n"],"monads/maybe/int-comp":[1252,"\n\nAn internalized version of composition in the Kleisli category for the maybe\nmonad.\n"],"monads/maybe/join":[1253,"\n\nThe join operation for the maybe monad.\n"],"monads/maybe/int-cps":[1257,"\n\nConvert the maybe monad to continuation-passing style. Explained at\n[n-Category\nCafé](https://golem.ph.utexas.edu/category/2012/09/where_do_monads_come_from.html#c042100).\n"],"monads/state/unit":[972,"\n"],"monads/state/join":[1259,""],"monads/list/int-bind":[1265,"\n\nInternal bind in the list monad.\n"],"monads/list/unit":[430,"\n"],"monads/list/add":[435,"\n\nAddition in the list monad.\n"],"monads/list/join":[709,"\n\nThe join operation in the list monad.\n"],"monads/list/zero":[127,"\n\nThe zero of the list monad.\n"],"monads/cost/unit":[1266,"\n"],"monads/cost/join":[1061,"\n"],"monads/cost/strength":[275,"\n\nStrength in the cost monad.\n"],"monads/cost/enrich":[1268,"\n\nEnrichment for the cost monad.\n"],"monads/logic/unit":[1271,"\n"],"monads/either/unit":[156,"\n"],"monads/either/join":[1272,"\n"],"monads/searchable/unit":[630,"\n"],"monads/reader/unit":[630,"\n"],"monads/reader/join":[1274,"\n"],"monads/step/int-bind":[1065,"\n\nAn internal version of binding in the step monad.\n"],"monads/step/unit":[1049,"\n\nThe unit of the step monad.\n"],"monads/step/from-maybe":[1275,"\n\nLift from the maybe monad to the step monad.\n"],"monads/step/increment":[1278,"\n\nTake a step if the action is successful, otherwise do nothing.\n"],"monads/writer/write":[257,""],"monads/subset/guard":[1280,""],"monads/subset/add":[179,""],"monads/subset/join":[639,""],"monads/subset/zero":[151,""],"monads/cont/unit":[1281,"\n"],"monads/cont/join":[1285,"\n\nCollapse two layers of continuations into one.\n"],"monads/cont/bind":[1290,"\n\nChain continuations together.\n"],"monads/cont/run":[1287,"\n\nRun a computation with continuations.\n"],"subobj/empty":[149,"\n\nAn empty subobject.\n"],"subobj/disj":[1292,"\n\nThe union of two subobjects.\n"],"subobj/full":[206,"\n\nA subobject that is just the original object.\n"],"subobj/conj":[1294,"\n\nThe intersection of two subobjects.\n"],"subobj/complement":[1296,"\n\nThe complement of a subobject.\n"],"pe/6":[1300,"\n\nA complete solution to [Project Euler Problem\n6](https://projecteuler.net/problem=6).\n"],"bits/succ":[288,"\n\nThe successor of a natural number is also a natural number.\n"],"bits/left-shift":[1302,""],"bits/to-f":[312,"\n\nConvert a binary natural number to a floating-point number.\n"],"bits/morton-fst":[1303,""],"bits/from-nat":[289,"\n\nConvert a natural number from unary to binary.\n"],"bits/zero":[127,"\n"],"bits/to-nat":[1308,"\n\nConvert a natural number from binary to unary.\n"],"cats/cost/f-cos":[1309,"\n"],"cats/cost/f-sin":[1310,"\n"],"cats/cost/snd":[1311,"\n"],"cats/cost/succ":[1312,"\n"],"cats/cost/f-pi":[1313,"\n"],"cats/cost/f-floor":[1314,"\n"],"cats/cost/f-lt":[1315,"\n"],"cats/cost/disj":[1316,"\n"],"cats/cost/f-negate":[1317,"\n"],"cats/cost/f-mul":[1318,"\n"],"cats/cost/n-add":[1320,"\n"],"cats/cost/fst":[1321,"\n"],"cats/cost/not":[1322,"\n"],"cats/cost/f-add":[1323,"\n"],"cats/cost/f-one":[1324,"\n"],"cats/cost/left":[407,"\n"],"cats/cost/f-sqrt":[1325,"\n"],"cats/cost/conj":[1326,"\n"],"cats/cost/f-zero":[1327,"\n"],"cats/cost/f-recip":[1328,"\n"],"cats/cost/right":[1329,"\n"],"cats/cost/f-atan2":[1330,"\n"],"cats/cost/cons":[1331,"\n"],"cats/cost/zero":[1332,"\n"],"cats/cost/n-pred-maybe":[1334,"\n"],"cats/cost/id":[1266,"\n"],"cats/cost/f-sign":[1335,"\n"],"cats/cost/t":[1336,"\n"],"cats/cost/f-exp":[1337,"\n"],"cats/cost/nil":[1338,"\n"],"cats/cost/either":[1339,"\n"],"cats/cost/ignore":[1340,"\n"],"cats/cost/f":[1341,"\n"],"lens/pair/fst":[1345,""],"fifo/empty?":[1349,"\n\nWhether a queue is empty.\n"],"fifo/refill":[1357,"\n\nPrepare a queue for a pop by refilling the pop stack.\n"],"fifo/push":[1359,"\n\nPush a value onto a queue.\n"],"fifo/pop":[1364,"\n\nPop an item from a queue, returning it in the left-hand component. The\nright-hand component is used to signal an empty queue.\n"],"fifo/nil":[1365,"\n\nAn empty queue.\n"],"scott/bool/true":[630,"\n"],"scott/bool/false":[534,"\n"],"pair/rotl":[665,""],"pair/assr":[275,"\n\nReassociate to the right.\n"],"pair/assl":[265,"\n\nReassociate to the left.\n"],"pair/dup":[2,"\n\nThe [diagonal map](https://ncatlab.org/nlab/show/diagonal+morphism).\n"],"pair/swap":[189,"\n\nSwap the first and second components of a pair.\n\nSwapping twice in a row is equivalent to the identity arrow.\n\nThis expression is the smallest with its type signature.\n"],"sum/left?":[1366,"\n"],"sum/assr":[797,"\n\nReassociate a triple sum to the right.\n"],"sum/assl":[803,"\n\nReassociate a triple sum to the left.\n"],"sum/swap":[501,"\n\nSwap the two cases of a sum.\n"],"mat3/mul":[1399,"\n"],"mat3/vec":[1391,"\n"],"mat3/trans":[1380,"\n\nTranspose a 3x3 matrix.\n"],"mat3/id":[1401,"\n\nA 3x3 identity matrix.\n"],"succ2":[1402,""],"v3/rgb/magenta":[1404,""]},"heap":["fst","id",["pair",1,1],["pair",1,2],"ignore","f-one",["pair",5,5],"f-add",["comp",6,7],["pair",5,8],["comp",9,7],["pair",8,10],"snd","f-recip",["comp",12,13],["pair",0,14],"f-mul",["comp",15,16],["comp",11,17],["comp",10,13],["pair",18,19],["pair",5,20],["comp",4,21],["pair",3,22],["comp",0,0],["comp",12,0],["pair",24,25],["comp",26,7],["comp",0,12],["comp",12,12],["pair",28,29],["comp",30,7],["pair",27,31],["comp",30,32],["pair",27,33],["comp",23,34],"f-floor","f-zero",["comp",4,37],["case",1,38],["comp",36,39],"f-negate",["comp",40,41],["pair",1,42],["comp",43,7],["comp",11,16],["comp",4,45],["pair",44,46],["comp",47,16],["comp",4,10],["comp",49,41],["pair",48,50],["comp",51,7],"f-sign","either",["comp",53,54],["comp",12,1],["curry",56],["comp",12,41],["curry",58],["case",57,59],["comp",55,60],["pair",61,1],["uncurry",1],["comp",62,63],["comp",52,64],["comp",4,5],["comp",66,41],["pair",65,67],["comp",68,7],["comp",0,69],["comp",25,69],["comp",29,69],["pair",71,72],["pair",70,73],["comp",35,74],["comp",0,75],["pair",12,12],["pair",12,77],["pair",76,78],["comp",26,16],["comp",30,16],["pair",80,81],["comp",30,82],["pair",80,83],["comp",79,84],"f-sin",["comp",4,8],["pair",86,87],["comp",88,16],["comp",2,16],["comp",10,90],["comp",4,91],"f-pi",["comp",4,93],["pair",92,94],["comp",95,16],["pair",89,96],["comp",97,7],["comp",12,98],["pair",0,99],["pair",24,12],["comp",101,16],["pair",28,12],["comp",103,16],["pair",102,104],["comp",100,105],["pair",106,12],["pair",8,8],["comp",108,7],["comp",4,109],["pair",1,110],["comp",111,16],["comp",0,112],["pair",113,12],["comp",0,90],["comp",12,90],["pair",115,116],["comp",117,7],["pair",118,66],"f-lt",["comp",119,120],["comp",114,121],["pair",5,37],["pair",37,37],["comp",5,41],["pair",125,37],"nil",["pair",123,127],"cons",["comp",128,129],["pair",126,130],["comp",131,129],["pair",123,132],["comp",133,129],["pair",124,134],["comp",135,129],["pair",124,136],["comp",137,129],["pair",123,138],["comp",139,129],"zero",["pair",141,127],"succ",["comp",0,143],["pair",144,129],["pr",142,145],["comp",146,12],"f",["comp",4,148],["comp",12,149],["curry",150],"t",["pr",152,149],["comp",12,153],["curry",154],"right",["case",143,141],"left",["comp",157,158],["pr",156,159],["case",1,141],["comp",160,161],["comp",12,162],["pair",0,163],["comp",164,63],["curry",165],["pr",155,166],["uncurry",167],["curry",168],["comp",0,169],["pair",170,12],["pair",101,103],["comp",0,63],["comp",12,63],["pair",173,174],["comp",172,175],"disj",["comp",176,177],["curry",178],["comp",171,179],["fold",151,180],["comp",147,181],"not",["pr",152,183],["pair",1,184],["comp",12,54],["pair",0,186],["comp",185,187],["pair",12,0],["curry",158],["curry",156],["case",190,191],["uncurry",192],["comp",189,193],["comp",189,158],["comp",189,156],["case",195,196],["comp",194,197],["pair",141,148],["comp",0,158],["comp",0,156],["case",200,201],["comp",198,202],["comp",187,203],["pair",143,149],["comp",4,152],["pair",1,206],["case",205,207],["comp",204,208],["pr",199,209],["comp",210,0],["comp",0,211],["comp",143,143],["comp",141,213],["comp",214,143],["comp",4,215],["pair",1,216],["comp",4,141],["curry",218],["pair",63,12],["comp",63,143],["curry",221],["pr",57,222],["uncurry",223],["comp",220,224],["curry",225],["pr",219,226],["uncurry",227],["comp",217,228],["comp",229,143],["comp",0,230],["case",212,231],["comp",198,232],["comp",188,233],["comp",82,7],["comp",2,235],"f-sqrt",["case",1,37],["comp",237,238],["comp",236,239],["pair",240,87],["comp",241,120],["comp",4,156],["pair",158,243],["pair",242,244],["curry",25],["curry",29],["case",246,247],["comp",54,248],["comp",0,249],["pair",250,12],["comp",251,63],["comp",245,252],"swap",["comp",254,129],["comp",4,57],"dup",["comp",256,257],["pair",1,258],["comp",259,63],["pair",66,1],["comp",261,7],["pair",152,127],["pair",0,25],["pair",264,29],"conj",["comp",266,183],["pair",177,267],["comp",268,266],["pair",269,266],["comp",270,189],["comp",0,271],["pair",272,12],["comp",265,273],["pair",24,103],["comp",12,129],["pair",0,276],["comp",275,277],["comp",274,278],["fold",263,279],["pair",206,1],["comp",281,129],["comp",12,282],["curry",283],["case",284,57],["comp",54,285],["uncurry",286],["comp",280,287],["pr",127,288],["comp",4,127],["pair",1,290],["comp",101,129],["pair",28,292],["comp",293,63],["curry",294],["fold",57,295],["uncurry",296],["comp",291,297],["pair",1,87],["comp",299,16],["comp",12,300],["pair",0,301],["pair",1,66],["comp",303,7],["comp",12,304],["curry",305],["case",306,57],["comp",54,307],["uncurry",308],["comp",302,309],["fold",37,310],["comp",298,311],["comp",289,312],["pair",0,58],["comp",314,7],["comp",303,315],"f-log1p",["comp",316,317],["comp",37,13],["comp",319,41],["case",1,320],["comp",318,321],["pair",1,322],["comp",323,16],["comp",324,13],["comp",313,325],["comp",299,105],["comp",0,327],["pair",328,12],["pair",37,6],["pair",37,124],["case",330,331],["comp",54,332],["comp",0,44],["comp",12,44],["pair",334,335],["comp",8,13],["comp",4,337],["pair",240,338],["comp",339,120],["comp",336,340],["pair",87,1],["comp",342,16],["comp",141,143],["comp",344,143],["comp",345,143],["comp",346,143],["comp",347,143],["comp",2,224],["comp",348,349],["pr",141,213],["comp",350,351],["comp",313,13],["comp",352,353],["comp",4,354],["pair",1,355],["comp",356,105],["pair",214,348],["comp",358,224],["comp",214,2],["comp",360,224],["pair",359,361],["comp",0,313],["comp",12,313],["pair",363,364],["comp",362,365],["comp",366,17],["comp",2,228],["comp",350,368],["pair",215,369],["comp",370,365],["comp",371,17],["comp",372,41],["pair",367,373],["comp",4,374],["pair",1,375],["comp",26,315],["comp",30,315],["pair",377,378],["comp",376,379],["comp",357,380],["pair",12,224],["comp",12,343],["curry",383],["comp",13,262],["comp",12,385],["curry",386],["case",384,387],["comp",54,388],["comp",0,389],["pair",390,12],["comp",391,63],["fold",5,392],["comp",349,143],["comp",103,63],["pair",24,395],["comp",396,198],["comp",12,156],["case",63,398],["comp",397,399],["curry",400],["pair",1,143],["comp",402,228],["comp",403,211],["comp",63,253],["comp",4,344],["pair",158,406],["pair",156,218],["case",407,408],["comp",405,409],["curry",410],["comp",0,13],["pair",412,12],["comp",0,413],["comp",313,257],["comp",0,415],["comp",12,415],["pair",416,417],["comp",12,418],["pair",414,419],["comp",0,16],["pair",421,12],["comp",422,7],["comp",265,423],["comp",26,424],["comp",30,424],["pair",425,426],["comp",427,15],["comp",420,428],["comp",291,129],["comp",0,430],["pair",431,12],["comp",0,298],["pair",433,12],["comp",434,297],["comp",432,435],["fold",127,436],["pair",120,1],["comp",438,252],["comp",26,439],["comp",30,439],["pair",440,441],["comp",30,442],["pair",440,443],["comp",26,444],["pair",120,189],["comp",446,252],["comp",26,447],["comp",30,447],["pair",448,449],["comp",30,450],["pair",448,451],["comp",30,452],["pair",445,453],["pair",149,1],["comp",455,129],["comp",129,456],["fold",127,457],["comp",4,140],["pair",459,1],["comp",4,124],["comp",12,461],["curry",462],["pair",396,12],["comp",81,41],["pair",80,465],["comp",466,7],["pair",28,25],["comp",468,16],["pair",24,29],["comp",470,16],["pair",469,471],["comp",472,7],["pair",467,473],["comp",103,474],["pair",475,24],["comp",476,32],["comp",464,477],["curry",478],["fold",463,479],["uncurry",480],["comp",434,481],["comp",460,482],["pair",1,38],["comp",484,120],["case",37,5],["comp",54,486],["comp",485,487],["pair",488,1],["pair",1,489],["pair",338,1],["comp",491,16],["pair",28,101],["comp",493,63],["comp",143,158],["comp",344,158],["case",156,496],["comp",160,497],["case",495,498],["case",1,1],["case",156,158],["comp",141,158],["case",153,153],["pair",0,174],["comp",275,504],["comp",505,63],["curry",506],["comp",12,7],["pair",0,508],["comp",509,7],["comp",84,510],["comp",2,511],["comp",512,239],["pair",1,67],["comp",514,7],["comp",513,515],["comp",361,351],["pair",517,214],["comp",218,143],["curry",519],["comp",220,228],["curry",521],["pr",520,522],["uncurry",523],["comp",518,524],["comp",184,183],["fold",141,224],["comp",0,368],["pair",528,12],["comp",529,129],["fold",127,530],["comp",531,527],["comp",147,532],["curry",12],["comp",63,162],["curry",535],["pr",534,536],["comp",517,351],["comp",538,351],["comp",539,349],["comp",141,402],["pair",144,12],["pair",0,228],["comp",542,543],["pr",541,544],["comp",545,12],["pr",541,382],["comp",547,0],["curry",206],["comp",12,160],["pair",0,550],["comp",551,198],["case",63,149],["comp",552,553],["curry",554],["pr",549,555],["uncurry",556],["comp",12,218],["curry",558],["comp",103,228],["pair",560,24],["comp",561,224],["comp",464,562],["curry",563],["fold",559,564],["uncurry",565],["comp",434,566],["pair",214,215],["comp",568,524],["comp",12,368],["pair",0,570],["comp",2,571],["comp",572,228],["comp",527,368],["comp",147,574],["pair",221,12],["pair",168,0],["case",559,57],["comp",54,578],["uncurry",579],["comp",577,580],["comp",576,581],["curry",582],["pr",559,583],["uncurry",584],["comp",12,205],["curry",586],["comp",12,207],["curry",588],["case",587,589],["comp",54,590],["comp",12,591],["pair",592,0],["comp",593,63],["pr",199,594],["pair",214,569],["comp",596,524],["comp",519,143],["pair",1,598],["comp",599,524],["pair",162,1],["comp",601,228],["comp",602,143],["pr",214,603],["comp",12,2],["pair",0,605],["comp",606,63],["curry",607],["comp",12,189],["pair",0,609],["comp",610,63],["curry",611],["comp",25,143],["comp",0,228],["pair",614,12],["comp",265,615],["comp",616,129],["pair",613,617],["pair",344,127],["comp",12,619],["case",618,620],["comp",198,621],["comp",622,158],["fold",156,623],["case",12,127],["comp",624,625],["comp",12,143],["fold",141,627],["comp",628,162],["curry",0],["comp",101,63],["pair",631,395],["comp",632,63],["curry",633],["curry",634],63,["pair",636,12],["comp",637,636],["curry",638],["pair",631,28],["comp",640,63],["curry",641],["curry",642],["case",12,12],["pair",202,644],["case",0,0],["comp",12,158],["case",647,398],["pair",646,648],["pair",1,149],["case",207,650],["curry",647],["curry",398],["case",652,653],["comp",54,654],["comp",12,655],["pair",656,0],["comp",657,63],["comp",632,224],["curry",659],["pair",148,127],["comp",0,254],["pair",662,12],["comp",663,275],["comp",265,664],["pair",149,12],["comp",12,666],["curry",667],["pair",206,129],["comp",12,669],["curry",670],["case",668,671],["comp",54,672],["uncurry",673],["comp",665,674],["fold",661,675],["comp",12,290],["curry",677],["case",129,127],["comp",679,158],["comp",12,680],["pair",0,681],["case",158,243],["comp",198,683],["comp",682,684],["fold",156,685],["comp",12,686],["pair",0,687],["comp",30,63],["pair",26,689],["comp",690,129],["pair",28,290],["comp",692,63],["case",691,693],["comp",198,694],["comp",688,695],["curry",696],["fold",678,697],["uncurry",698],["fold",152,149],["fold",156,200],["pair",12,63],["comp",702,129],["curry",703],["pr",678,704],["comp",12,705],["pair",706,0],["comp",707,63],["fold",127,435],["comp",0,184],["pair",129,12],["pair",710,711],["comp",712,252],["fold",127,713],["comp",147,714],["comp",147,527],["case",129,12],["comp",193,717],["fold",127,718],["comp",686,625],["comp",12,720],["pair",0,721],["comp",722,63],["curry",723],["pr",57,724],["pair",0,129],["comp",726,129],["fold",127,727],["pair",290,127],["comp",729,129],["pair",127,730],["comp",264,129],["pair",732,29],["comp",733,129],["pair",732,734],["fold",731,735],["comp",736,12],["pair",101,395],["comp",738,129],["curry",739],["fold",678,740],["uncurry",741],["fold",152,266],["curry",627],["case",744,57],["comp",54,745],["uncurry",746],["fold",141,747],["fold",148,269],["fold",148,177],["pair",240,67],["comp",751,7],"f-atan2",["comp",189,753],["pair",8,93],["comp",755,16],["comp",4,756],["pair",1,757],["comp",758,17],["comp",754,759],["pair",760,338],["comp",761,7],["comp",241,16],["pair",762,763],["comp",764,85],["comp",0,1],["pair",26,30],["comp",12,767],["pair",766,768],["comp",101,235],["comp",103,235],["pair",770,771],["comp",264,772],["pair",0,29],["comp",774,772],["pair",773,775],["comp",769,776],"f-cos",["pair",86,778],["comp",0,41],["pair",12,780],["pair",781,1],["comp",779,782],["pair",37,5],["pair",123,784],["comp",207,63],["comp",650,63],["pair",786,787],["comp",189,252],["curry",789],["case",495,156],["comp",160,158],["case",792,156],["comp",158,156],["case",158,794],["comp",156,156],["case",795,796],["comp",501,156],["case",158,798],["comp",158,158],["comp",156,158],["case",801,156],["case",800,802],["comp",799,803],["comp",797,804],["comp",793,805],["pair",0,290],["comp",12,807],["curry",808],["pair",63,29],["pair",12,24],["comp",811,63],["comp",0,129],["pair",812,813],["comp",810,814],["curry",815],["pr",809,816],["comp",26,63],["pair",818,689],["comp",606,819],["comp",820,224],["curry",821],["pair",0,627],["comp",823,220],["comp",824,228],["curry",825],["comp",189,63],["comp",0,141],["curry",828],["comp",109,13],["comp",4,830],["pair",12,831],["pair",0,832],["comp",25,90],["comp",774,16],["comp",835,41],["pair",834,836],["comp",837,7],["comp",838,237],["pair",264,839],["comp",840,198],["comp",28,41],["pair",842,58],["comp",843,7],["pair",844,24],["comp",845,17],["comp",846,158],["case",847,243],["comp",841,848],["comp",4,331],["pair",37,125],["comp",851,7],["comp",4,852],["pair",12,853],["pair",0,854],["pair",850,855],["comp",513,13],["pair",857,1],["comp",0,3],["pair",859,12],["comp",860,84],["comp",858,861],["comp",12,862],["comp",863,25],["pair",262,87],["comp",865,17],["comp",1,41],["pair",66,867],["comp",868,7],["comp",866,869],["comp",864,870],["pair",869,1],["comp",359,313],["comp",350,313],["pair",873,874],["comp",875,17],["comp",4,876],["pair",877,66],["pair",338,878],["comp",4,879],["pair",1,880],["comp",881,861],["comp",0,882],["pair",5,6],["comp",4,884],["pair",1,885],["comp",886,861],["comp",12,887],["pair",883,888],["comp",872,889],["comp",890,34],["comp",871,891],["comp",856,892],["pair",37,851],["comp",4,894],["pair",1,895],["comp",30,379],["pair",377,897],["comp",896,898],["comp",0,899],["pair",900,12],["comp",12,512],["comp",0,512],["comp",338,90],["comp",904,41],["pair",903,905],["comp",906,7],["pair",511,907],["pair",902,908],["comp",901,909],["comp",910,849],["pair",1,911],["comp",189,861],["comp",12,913],["pair",0,914],["comp",915,34],["comp",275,916],["pair",917,895],["comp",918,898],["comp",0,866],["comp",25,866],["comp",29,866],["pair",921,922],["pair",920,923],["comp",919,924],["comp",28,862],["comp",926,25],["comp",927,870],["comp",928,891],["case",925,929],["comp",198,930],["comp",912,931],["comp",856,932],["pair",110,835],["comp",934,16],["comp",935,41],["pair",834,936],["comp",937,7],["pair",87,511],["comp",939,16],["pair",940,907],["pair",902,941],["comp",901,942],["comp",938,237],["pair",264,944],["comp",945,198],["pair",24,87],["comp",947,16],["pair",844,948],["comp",949,17],["comp",950,158],["case",951,243],["comp",946,952],["comp",943,953],["pair",1,954],["comp",955,931],["comp",943,938],["pair",38,957],["comp",958,120],["pair",959,1],["pair",5,124],["comp",4,961],["comp",12,962],["curry",963],["comp",12,892],["curry",965],["case",964,966],["comp",54,967],["uncurry",968],["comp",960,969],["comp",856,970],["curry",1],["pair",972,1],["pair",0,1],["comp",540,143],["comp",975,817],["comp",4,976],["comp",38,2],["comp",0,64],["comp",12,64],["pair",979,980],["comp",12,981],["comp",2,474],["comp",982,983],["pair",0,984],["comp",985,32],["curry",986],["pair",978,987],["pair",977,988],["comp",989,63],["comp",990,12],["comp",0,242],["pair",992,711],["comp",993,252],["fold",127,994],["comp",995,628],["comp",991,996],["comp",4,540],["pair",1,998],["comp",999,557],["pair",1000,244],["comp",1001,252],["comp",997,1002],["comp",381,1003],["comp",313,759],["comp",1005,75],["case",1006,331],["comp",1004,1007],["comp",830,2],["pair",1009,19],["pair",126,337],["pair",1011,127],["comp",1012,129],["pair",1010,1013],["comp",1014,129],["comp",4,1015],["comp",12,38],["curry",1017],["comp",24,12],["comp",24,0],["pair",1020,12],["comp",1021,379],["comp",1022,240],["pair",1019,1023],["comp",1024,17],["pair",1025,395],["comp",1026,7],["curry",1027],["fold",1018,1028],["comp",1016,1029],["pair",1030,1],["comp",1031,63],["comp",831,41],["pair",1032,1033],["comp",1034,7],["comp",1035,490],["comp",122,54],["case",961,884],["comp",1037,1038],["pair",4,1],["comp",12,411],["curry",1041],["comp",4,1042],["comp",37,2],["comp",1044,987],["pair",1043,1045],["comp",1046,63],["pair",517,1047],["pair",158,218],["comp",12,1049],["curry",1050],["comp",0,1051],["curry",1052],["pair",395,24],["comp",275,193],["pair",29,0],["comp",1056,63],["pair",1057,25],["comp",12,224],["pair",0,1059],["comp",275,1060],["comp",1058,1061],["pair",243,25],["case",1062,1063],["comp",1055,1064],["comp",1054,1065],["curry",1066],["comp",702,1067],["curry",1068],["pr",1053,1069],["uncurry",1070],["comp",1048,1071],["uncurry",1072],["comp",1040,1073],["comp",1074,193],["comp",12,1006],["pair",66,66],["pair",66,1077],["case",1076,1078],["comp",1075,1079],["comp",525,817],["comp",4,1081],["comp",12,983],["pair",0,1083],["comp",1084,32],["curry",1085],["pair",978,1086],["pair",1082,1087],["comp",1088,63],["comp",1089,12],["comp",525,313],["comp",4,1091],["pair",313,1092],["comp",1093,17],["comp",628,1094],["comp",995,1095],["comp",1090,1096],["pair",869,869],["pair",869,1098],["comp",1097,1099],["comp",540,817],["comp",4,1101],["pair",1102,988],["comp",1103,63],["comp",1104,12],["comp",540,313],["comp",4,1106],["pair",313,1107],["comp",1108,17],["comp",628,1109],["comp",995,1110],["comp",1105,1111],["comp",1112,1099],["comp",341,333],["comp",12,783],["pair",1115,0],["comp",1116,772],["comp",1117,1039],["comp",12,75],["comp",0,122],["pair",1120,12],["curry",1119],["comp",12,885],["curry",1123],["case",1122,1124],["comp",54,1125],["uncurry",1126],["comp",1121,1127],["pair",1,94],["comp",1129,17],["comp",12,1130],["pair",0,1131],["comp",1132,1117],["comp",107,1133],["comp",0,86],["pair",1135,38],["pair",38,1136],["comp",1134,1137],["comp",329,1133],["comp",1139,341],["comp",1140,333],["comp",0,7],["pair",109,5],["comp",1143,7],["pair",1144,8],["comp",1145,17],["comp",4,1146],["pair",86,1147],["comp",1148,7],["comp",12,1149],["pair",1142,1150],["comp",17,75],["comp",1151,1152],["pair",240,753],["comp",12,53],["pair",240,0],["pair",7,315],["comp",1156,1157],["pair",1,338],["comp",1159,16],["comp",1160,239],["comp",0,1161],["comp",12,1161],["pair",1162,1163],["comp",1158,1164],["pair",1155,1165],["comp",12,314],["curry",1167],["case",57,1168],["comp",54,1169],["uncurry",1170],["comp",1166,1171],"f-exp",["comp",0,1173],["pair",778,86],["comp",12,1175],["pair",1174,1176],["comp",264,16],["pair",1178,835],["comp",1177,1179],["pair",471,469],["comp",1181,7],["pair",80,1182],["comp",26,17],["comp",30,17],["pair",1184,1185],["comp",30,1186],["pair",1184,1187],["comp",189,898],["pair",338,338],["pair",338,1190],["pair",1191,1],["comp",1192,84],["comp",1189,1193],["pair",0,1194],["comp",1195,34],["comp",0,25],["comp",12,29],["pair",1197,1198],["comp",1199,16],["comp",0,29],["comp",12,25],["pair",1201,1202],["comp",1203,16],["comp",1204,41],["pair",1200,1205],["comp",1206,7],["pair",1201,25],["comp",1208,16],["pair",24,1198],["comp",1210,16],["comp",1211,41],["pair",1209,1212],["comp",1213,7],["pair",24,1202],["comp",1215,16],["pair",1197,25],["comp",1217,16],["comp",1218,41],["pair",1216,1219],["comp",1220,7],["pair",1214,1221],["pair",1207,1222],["pair",37,123],["pair",37,784],["fold",37,7],["comp",25,41],["comp",29,41],["pair",1227,1228],["pair",780,1229],["comp",12,1230],["pair",0,1231],["comp",1232,34],["fold",5,16],["comp",5,1173],["comp",1233,513],["comp",254,120],["pair",120,1237],["comp",1238,177],["comp",1239,183],["comp",8,322],["pair",1,90],["comp",1242,16],["pair",5,91],["comp",1244,7],["comp",1245,1243],["case",827,243],["comp",193,1247],["case",63,243],["comp",198,1249],["comp",505,1250],["curry",1251],["case",1,156],["pair",25,0],["comp",1254,63],["curry",1255],["case",1256,247],["comp",636,636],["curry",1258],["comp",0,827],["pair",1260,12],["comp",1261,129],["fold",127,1262],["comp",742,1263],["comp",1264,709],["pair",1,218],["pair",173,627],["comp",265,1267],["pair",25,774],["comp",1269,63],["curry",1270],["case",158,1],["comp",220,63],["curry",1273],["case",1049,408],["comp",823,158],["case",1276,398],["comp",193,1277],["comp",254,12],["curry",1279],["curry",827],["comp",12,1281],["pair",0,1282],["comp",1283,63],["curry",1284],["pair",1,256],["comp",1286,63],["comp",0,1287],["pair",12,1288],["comp",1289,63],["comp",632,177],["curry",1291],["comp",632,266],["curry",1293],["comp",63,183],["curry",1295],["pair",533,575],["uncurry",537],["comp",1297,1298],["comp",143,1299],["comp",661,129],["fold",1301,129],["comp",676,12],["comp",12,349],["pair",0,1304],["comp",1305,747],["fold",141,1306],["comp",298,1307],["pair",778,406],["pair",86,406],["pair",12,406],["pair",143,406],["comp",93,1266],["pair",36,406],["pair",120,406],["pair",177,406],["pair",41,406],["pair",16,406],"n-add",["pair",1319,406],["pair",0,406],["pair",183,406],["pair",7,406],["comp",5,1266],["pair",237,406],["pair",266,406],["comp",37,1266],["pair",13,406],["pair",156,406],["pair",753,406],["pair",129,406],["comp",141,1266],"n-pred-maybe",["pair",1333,406],["pair",53,406],["comp",152,1266],["pair",1173,406],["comp",127,1266],["pair",54,406],["comp",4,1266],["comp",148,1266],["pair",12,28],["comp",12,1342],["curry",1343],["pair",246,1344],["comp",0,700],["comp",12,700],["pair",1346,1347],["comp",1348,266],["pair",1347,1],["pair",290,433],["comp",12,1351],["curry",1352],["case",1353,57],["comp",54,1354],["uncurry",1355],["comp",1350,1356],["comp",811,129],["pair",1358,28],["comp",1357,688],["comp",1269,158],["case",1361,398],["comp",198,1362],["comp",1360,1363],["pair",127,127],["case",206,149],["comp",25,0],["comp",29,0],["pair",1367,1368],["pair",24,1369],["comp",25,25],["comp",29,25],["pair",1371,1372],["pair",1197,1373],["comp",25,29],["comp",29,29],["pair",1375,1376],["pair",1201,1377],["pair",1374,1378],["pair",1370,1379],["comp",12,1380],["pair",766,1381],["comp",101,511],["comp",28,0],["pair",1384,12],["comp",1385,511],["comp",28,12],["pair",1387,12],["comp",1388,511],["pair",1386,1389],["pair",1383,1390],["comp",264,1391],["pair",0,1202],["comp",1393,1391],["pair",0,1198],["comp",1395,1391],["pair",1394,1396],["pair",1392,1397],["comp",1382,1398],["pair",1224,1225],["pair",961,1400],["comp",143,143],["pair",37,5],["pair",5,1403],["comp",361,313],["pair",873,1405],["comp",1406,17],["comp",352,313],["comp",1408,13],["comp",291,63],["comp",103,435],["pair",24,1411],["comp",1412,63],["curry",1413],["pair",1,127],["comp",1415,129],["comp",12,1416],["pair",0,1417],["comp",1418,1414],["comp",12,430],["pair",0,1420],["comp",1421,1414],["pair",12,290],["comp",1423,129],["pair",0,1424],"app",["comp",293,1426],["curry",1427],["fold",534,1428],["pair",1429,290],["comp",1430,1426],["comp",1431,1429],["comp",12,1432],["comp",0,1433],["pair",1434,12],["comp",1435,1426],["pair",24,1436],["comp",1437,1426],["curry",1438],["comp",1425,1439],["comp",187,198],["case",0,149],["comp",1441,1442],["comp",186,192],["pair",1444,0],["comp",1445,1426],["comp",254,158],["comp",254,156],["case",1447,1448],["comp",1446,1449],["comp",1450,1442],["tfold",156,200],["comp",4,246],["pair",1,1453],["comp",1454,507],["pair",1453,1],["comp",1456,507],["comp",4,247],["pair",1458,1],["comp",1459,507],["pair",1457,1460],["pair",246,1],["comp",103,1426],["pair",24,1463],["comp",1464,1426],["curry",1465],["comp",1462,1466],["pair",247,1],["comp",1468,1466],["pair",1467,1469],"tnil",["comp",4,1471],["comp",1472,257],["pair",1,1473],"tcons",["comp",1474,1475],["comp",1471,257],["comp",4,1477],["pair",1,1478],["comp",1479,1475]],"templates":{"max-headroom-camera":[["comp",0,["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore","f-pi"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]]],["comp",["pair",["comp","snd",["comp",["pair","f-sin","f-cos"],["pair",["pair","snd",["comp","fst","f-negate"]],"id"]]],"fst"],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp",["pair",["comp","fst","snd"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]]]]]],"\n"],"fractal-membership":[["comp",["comp",["comp",["pair",["comp","ignore",["comp",1,["pr",["curry",["comp","snd",["pair","fst",["comp","ignore","nil"]]]],["curry",["comp",["pair",["uncurry","id"],["comp","snd","snd"]],["pair",["comp",["pair","snd",["comp","fst","fst"]],["uncurry","id"]],["comp","fst","cons"]]]]]]],["pair",["comp",["comp","ignore","f-zero"],["pair","id","id"]],0]],["uncurry","id"]],"snd"],["comp",["fold","nil",["comp",["pair",["comp","fst",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"]],["pair","cons","snd"]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["comp",["fold","zero",["comp","snd","succ"]],["comp",["pair",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]],["comp","ignore",["comp",1,["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]]]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]]]],"\n\nMeasure the degree to which a fractal diverges. Given a maximum number of\nsteps, we iterate the IFS for a fractal in the complex plane until its\nabsolute value exceeds 2, and return a value in [0,1] indicating how many\nsteps were taken before divergence.\n"],"monad-choose":[["fold",0,["comp",["pair",["comp","fst",1],"snd"],2]],""],"l":[["comp",["pair",0,1],"cons"],""],"fractal-maybe":[["comp",["comp",0,["pair",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"],["pair","left",["comp","ignore","right"]]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]],"\n\nTake a step in an IFS, failing if the step has magnitude 2 or greater.\n"],"pick-const":[["comp","either",["case",0,1]],""],"iter-fractal-fast":[["comp",["pair","ignore","id"],["uncurry",["comp",["pair",0,["comp",["pair",["comp","ignore",["curry",["comp","snd",["curry",["comp",["comp",["uncurry","id"],["comp",["pair",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"],["pair","left",["comp","ignore","right"]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["case",["pair","left",["comp","ignore",["comp","zero","succ"]]],["pair","right",["comp","ignore","zero"]]]]]]]],["comp",["comp","f-zero",["pair","id","id"]],1]],["uncurry","id"]]],["uncurry",["pr",["curry",["comp","fst",["curry",["comp","snd",["pair","left",["comp","ignore","zero"]]]]]],["curry",["comp",["pair","snd",["uncurry","id"]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair",["comp",["pair",["comp","snd","snd"],"fst"],["uncurry","id"]],["comp","snd","fst"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],["pair",["comp","ignore","right"],["comp","snd","fst"]]]]]]]]]]]]],"\n\nGiven a maximum number of steps, iterate the given fractal.\n"],"graph-fun":[["comp",0,["pair","id",["pair","id",["comp","ignore","f-one"]]]],"\n\nGraph a real function on the plane. When interpreted as a red/green/blue\ntriple, the codomain varies from blue to white as the value of the function\nvaries from zero to one.\n"],"fractal-membership-fast":[["comp",["comp",["comp",["pair","ignore","id"],["uncurry",["comp",["pair",1,["comp",["pair",["comp","ignore",["curry",["comp","snd",["curry",["comp",["comp",["uncurry","id"],["comp",["pair",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"],["pair","left",["comp","ignore","right"]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["case",["pair","left",["comp","ignore",["comp","zero","succ"]]],["pair","right",["comp","ignore","zero"]]]]]]]],["comp",["comp","f-zero",["pair","id","id"]],0]],["uncurry","id"]]],["uncurry",["pr",["curry",["comp","fst",["curry",["comp","snd",["pair","left",["comp","ignore","zero"]]]]]],["curry",["comp",["pair","snd",["uncurry","id"]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair",["comp",["pair",["comp","snd","snd"],"fst"],["uncurry","id"]],["comp","snd","fst"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],["pair",["comp","ignore","right"],["comp","snd","fst"]]]]]]]]]]]]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp","snd",["comp",["comp",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]],["comp",["pair","id",["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],"f-pi"],"f-mul"]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]],["comp",["comp",["pair",["pair","id",["pair","id","id"]],["comp","ignore",["pair","f-one",["pair",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],["comp",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"],"f-recip"]]]]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-add"]]]]],["pair",["comp","fst",["comp",["pair",["comp",["comp",["pair",["comp",["pair",["comp",["pair","id",["comp",["comp","f-floor",["case","id",["comp","ignore","f-zero"]]],"f-negate"]],"f-add"],["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-mul"]]],"f-mul"],["comp",["comp","ignore",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","ignore","f-one"],"f-negate"]],"f-add"]],["pair",["comp",["comp","snd","fst"],["comp",["pair",["comp",["comp",["pair",["comp",["pair",["comp",["pair","id",["comp",["comp","f-floor",["case","id",["comp","ignore","f-zero"]]],"f-negate"]],"f-add"],["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-mul"]]],"f-mul"],["comp",["comp","ignore",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","ignore","f-one"],"f-negate"]],"f-add"]],["comp",["comp","snd","snd"],["comp",["pair",["comp",["comp",["pair",["comp",["pair",["comp",["pair","id",["comp",["comp","f-floor",["case","id",["comp","ignore","f-zero"]]],"f-negate"]],"f-add"],["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-mul"]]],"f-mul"],["comp",["comp","ignore",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","ignore","f-one"],"f-negate"]],"f-add"]]]]]]],["pair",["comp","ignore","f-one"],["pair",["comp","ignore","f-one"],["comp","ignore","f-one"]]]]],"\n\nIterate a fractal for a maximum number of steps, and return a value in $[0,1]$\nindicating how many steps were taken, with 1 indicating that the fractal did\nnot diverge.\n"],"swap-curry":[["curry",["comp","swap",["uncurry",0]]],""],"fractal-membership-color":[["comp",["comp",["comp",["pair",["comp","ignore",["comp",1,["pr",["curry",["comp","snd",["pair","fst",["comp","ignore","nil"]]]],["curry",["comp",["pair",["uncurry","id"],["comp","snd","snd"]],["pair",["comp",["pair","snd",["comp","fst","fst"]],["uncurry","id"]],["comp","fst","cons"]]]]]]],["pair",["comp",["comp","ignore","f-zero"],["pair","id","id"]],0]],["uncurry","id"]],"snd"],["comp",["fold","nil",["comp",["pair",["comp","fst",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"]],["pair","cons","snd"]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["fold","zero",["comp","snd","succ"]]]],"\n\nLike fractal-membership, but just returning the length so that we can\nfalse-color it.\n"],"dynamics":[["pair",["comp","fst",["comp",["pair",["curry",["comp","snd",0]],"id"],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]],"snd"],"\n\nThe dynamics of a deterministic automaton. The second component of the pair is\nleft free, but usually is a status value, like a Boolean.\n"],"setup-viewport":[["comp",["comp",["pair","id",["comp","ignore",1]],["pair",["comp",["pair",["comp","fst","fst"],"snd"],"f-mul"],["comp",["pair",["comp","fst","snd"],"snd"],"f-mul"]]],["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]],"\n\nSet up a preferred viewport for 2D rendering. The viewport is centered at the\ngiven location, and drawn with at least the given radius circumscribed within\nthe rendering box.\n"],"take-step":[["comp",["comp",["pair",["comp","fst",0],["comp","snd","succ"]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case","left",["comp","snd","right"]]],"\n\nTake a step along a partial arrow, incrementing the number of steps taken.\n"],"subset-choose":[["fold",["curry",["comp","snd",["comp","ignore","f"]]],["comp",["pair",["comp","fst",["curry",0]],"snd"],["curry",["comp",["comp",["pair",["pair",["comp","fst","fst"],"snd"],["pair",["comp","fst","snd"],"snd"]],["pair",["comp","fst",["uncurry","id"]],["comp","snd",["uncurry","id"]]]],"disj"]]]],""],"sub-v2-by-const":[["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]],""],"apply-moore-machine":[["comp",["fold",["pair","nil",0],["pair",["comp",["pair",["comp",["comp","snd","snd"],1],["comp","snd","fst"]],"cons"],["comp",["pair",["comp","snd","snd"],"fst"],2]]],"fst"],""],"scale-v2-by-const":[["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],"snd"],"f-mul"],["comp",["pair",["comp","fst","snd"],"snd"],"f-mul"]]],""],"ratio":[["comp",["comp",["pair",0,1],["pair",["comp","fst",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]]],["comp","snd",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]]]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],""],"with-default":[["comp",0,["case","id",1]],""],"maybe-step":[["comp",0,["case",["comp",["pair","id",["comp","ignore",["comp","zero","succ"]]],"left"],["comp","zero","right"]]],"\n"],"iter-fractal":[["comp",["comp",["pair",["comp","ignore",["comp",1,["pr",["curry",["comp","snd",["pair","fst",["comp","ignore","nil"]]]],["curry",["comp",["pair",["uncurry","id"],["comp","snd","snd"]],["pair",["comp",["pair","snd",["comp","fst","fst"]],["uncurry","id"]],["comp","fst","cons"]]]]]]],["pair",["comp",["comp","ignore","f-zero"],["pair","id","id"]],0]],["uncurry","id"]],"snd"],"\n\nIterate an [IFS](https://en.wikipedia.org/wiki/Iterated_function_system) for a\ngiven number of steps.\n"],"nat/do-if-not-zero":[["comp",["comp",["pair","id",["pr","t",["comp","ignore","f"]]],"swap"],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp","ignore","right"]]],["curry",["comp","snd",["comp",0,"left"]]]]]]],"\n"],"nat/kata":[["pr",0,1],""],"nat/para":[["comp",["pr",["pair","zero",0],["pair",["comp","fst","succ"],1]],"snd"],""],"poly/horner":[["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]]],"snd"],["uncurry",["fold",["curry",["comp","snd",["comp","ignore",0]]],["curry",["comp",["pair",["pair",["comp","fst","fst"],["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]]],"snd"],["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],2],["comp","fst","fst"]],1]]]]]],"\n\nEvaluate a polynomial at an input coordinate using Horner's rule, given:\n\n* A target coordinate for the zero polynomial\n* An addition for coefficients\n* A multiplication for coordinates\n"],"fun/iter":[["pr",["curry",["comp","snd","id"]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",0]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]],"\n\nIterate a given arrow zero or more times.\n"],"fun/depsum":[["comp",1,["pair","id",0]],"\n\nGiven a first arrow, give the dependent sum of the second arrow over the\nfirst. The dependent sum is merely postcomposition.\n"],"fun/hom-const":[["curry",["comp","fst",0]],"\n\nTake and discard an additional argument by creating a hom.\n"],"fun/unname":[["comp",["pair","ignore","id"],["uncurry",0]],"\n\nReference an arrow by name.\n"],"fun/apppair":[["comp",["pair",0,1],["uncurry","id"]],"\n\nApply the output of one arrow onto the output of another.\n"],"fun/name":[["curry",["comp","snd",0]],"\n\nThe name of an arrow.\n"],"fun/graph":[["pair","id",0],"\n"],"fun/iter-maybe":[["pr",["curry",["comp","snd","left"]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",0]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case",["uncurry","id"],["comp","ignore","right"]]]]]]],"\n\nIterate a given arrow up to zero or more times.\n"],"fun/precomp":[["curry",["comp",["pair","fst",["comp","snd",0]],["uncurry","id"]]],"\n\nPrecompose a function type with an arrow. This is like the inverse-image\nfunctor for an arbitrary classifier. It is also like one version of the Yoneda\nembedding for the given arrow.\n"],"fun/observe":[["curry",["comp",["pair","snd","fst"],["uncurry",["comp",["pair",["comp","ignore",["curry",["comp","snd",0]]],["pr",["curry",["comp","snd","id"]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",1]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]]]],"\n\nObserve the value of an endomorphism after a specified number of iterations.\n"],"fun/flip":[["curry",["comp",["pair","snd","fst"],["uncurry",0]]],"\n\nSwap the order in which arguments are applied onto a curried arrow.\n"],"fun/postcomp":[["curry",["comp",["uncurry","id"],0]],"\n\nPostcompose a function type with an arrow. This is like one version of the\nYoneda embedding for the given arrow.\n"],"fun/const":[["comp","ignore",0],"\n"],"list/map":[["fold","nil",["comp",["pair",["comp","fst",0],"snd"],"cons"]],"\n"],"list/conspair":[["comp",["pair",0,1],"cons"],"\n\nBuild a list whose head is the output of one arrow and whose tail is the\noutput of another arrow.\n"],"list/kata":[["fold",0,1],""],"list/eq?":[["comp",["pair",["comp",["pair",["comp","fst",["fold","zero",["comp","snd","succ"]]],["comp","snd",["fold","zero",["comp","snd","succ"]]]],["uncurry",["pr",["curry",["comp","snd",["pr","t",["comp","ignore","f"]]]],["curry",["comp",["pair","fst",["comp","snd",["comp",["pr","right",["comp",["case","succ","zero"],"left"]],["case","id","zero"]]]],["uncurry","id"]]]]]],["comp",["uncurry",["fold",["curry",["comp","snd",["comp","ignore","nil"]]],["curry",["comp",["pair","fst",["comp","snd",["fold","right",["comp",["pair","fst",["comp","snd",["comp",["case","cons","nil"],"left"]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case","left",["comp","ignore","right"]]]]]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case",["comp",["pair",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["uncurry","id"]]],"cons"],["comp",["pair",["comp","fst","snd"],["comp","ignore","nil"]],["uncurry","id"]]]]]]]],["comp",["fold","nil",["comp",["pair",["comp","fst",0],"snd"],"cons"]],["fold","t","conj"]]]],"conj"],"\n\nEquality on lists is decidable, provided that equality of elements is\ndecidable.\n"],"list/para":[["comp",["fold",["pair","nil",0],["pair",["comp",["pair","fst",["comp","snd","fst"]],"cons"],1]],"snd"],""],"list/filter":[["fold","nil",["comp",["pair",["comp","fst",0],["pair","cons","snd"]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],"\n\nApply a predicate to every element of a list, and retain the elements which\nthe predicate admits.\n"],"list/scan":[["comp",["fold",["pair",0,"nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",1,"snd"]],["pair","fst","cons"]]],"snd"],"\n\n\n"],"bool/ternary":[["comp",["comp",["pair","id",0],["pair","fst",["comp","snd","either"]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case",["comp","fst",1],["comp","fst",2]]]],""],"bool/both":[["comp",["pair",0,1],"conj"],"\n\nWhether two predicates both hold.\n"],"bool/if":[["comp","either",["case",["curry",["comp","snd",0]],["curry",["comp","snd",1]]]],"\n\nAs close as we can get to an if-expression.\n"],"bool/either":[["comp",["pair",0,1],"disj"],"\n\nWhether either predicate holds.\n"],"sdf2/extrude":[["comp",["pair",1,["comp",["comp","ignore",0],"f-negate"]],"f-add"],"\n"],"sdf2/scale":[["comp",["pair",["comp",["comp",["pair","id",["comp","ignore",["pair",0,0]]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]]],1],["comp","ignore",0]],"f-mul"],"\n"],"sdf2/union":[["comp",["pair",0,1],["comp",["pair","f-lt","id"],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],"\n"],"sdf2/translate":[["comp",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]],1],"\n"],"sdf2/metaballs":[["comp",["pair",["comp",["pair",["comp",1,["fold",["curry",["comp","snd",["comp","ignore","f-zero"]]],["curry",["comp",["pair",["comp",["pair",["comp",["comp","fst","fst"],"snd"],["comp",["comp",["pair",["comp",["comp","fst","fst"],"fst"],"snd"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]],["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]]],"f-add"]]]],"id"],["uncurry","id"]],["comp",["comp","ignore",0],"f-negate"]],"f-add"],"\n\n\n"],"mat2/vecpair":[["comp",["pair",0,1],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp",["pair",["comp","fst","snd"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]]]],"\n"],"weekend/hit_sphere3?":[["comp",["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp",["comp",["pair",["comp",["comp","snd","fst"],["comp",["pair","id","id"],"f-mul"]],["comp",["comp",["pair","fst",["comp","snd","snd"]],"f-mul"],"f-negate"]],"f-add"],"f-sqrt"]],["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]]],["case",["comp",["comp",["pair",["comp",["pair",["comp",["comp","fst","snd"],"f-negate"],["comp","snd","f-negate"]],"f-add"],["comp","fst","fst"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],"left"],["comp","ignore","right"]]]],"\n\nBasically the same as hit_sphere2?, but now the quadratic formula is rewritten\nin terms of $h$, where $b = 2h$.\n"],"weekend/hit_sphere":[["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"f-mul"],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],"\n\nTest whether a ray hits a sphere, generating coefficients for the quadratic\nformula.\n"],"weekend/hit_sphere2":[["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],"\n\nTest whether a ray hits a sphere, generating coefficients for the quadratic\nformula. The coefficients are not $a$, $b$, and $c$, but $a$, $h$, and $c$,\nwhere $b = 2h$.\n"],"weekend/hit_sphere?":[["comp",["pair",["comp","ignore","f-zero"],["comp",["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"f-mul"],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],["comp",["pair",["comp",["comp","snd","fst"],["comp",["pair","id","id"],"f-mul"]],["comp",["comp",["pair",["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],["comp",["pair","fst",["comp","snd","snd"]],"f-mul"]],"f-mul"],"f-negate"]],"f-add"]]],"f-lt"],"\n\n\n"],"weekend/hit_sphere2?":[["comp",["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"f-mul"],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp",["comp",["pair",["comp",["comp","snd","fst"],["comp",["pair","id","id"],"f-mul"]],["comp",["comp",["pair",["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],["comp",["pair","fst",["comp","snd","snd"]],"f-mul"]],"f-mul"],"f-negate"]],"f-add"],"f-sqrt"]],["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]]],["case",["comp",["comp",["pair",["comp",["pair",["comp",["comp","fst","snd"],"f-negate"],["comp","snd","f-negate"]],"f-add"],["comp",["pair",["comp","fst","fst"],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],"left"],["comp","ignore","right"]]]],"\n\n\n"],"comonads/reader/duplicate":[["curry",["curry",["comp",["pair","snd",["comp","fst",0]],"fun/app"]]],""],"comonads/reader/counit":[["comp",["pair","id",["comp","ignore",0]],"fun/app"],""],"comonads/product/bind":[["pair","fst",0],""],"v2/dist-fun":[["comp",["comp",["comp",["pair",["comp","fst",0],["comp","snd","f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","f-sqrt",["case","id","f-zero"]],["comp","f-sqrt",["case","id","f-zero"]]]],"\n"],"v2/map2":[["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],0],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],0]],"\n\n\nLift a binary operation to a vector space.\n"],"v2/scale":[["comp",["pair",["comp",["comp",["pair","id",["comp","ignore",1]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],0],["comp","ignore",2]],"f-mul"],"\n\nScale a vector.\n"],"v2/map":[["pair",["comp","fst",0],["comp","snd",0]],"\n\nMap over both dimensions of a vector simultaneously.\n"],"v2/translate":[["comp",["pair",["comp",["comp",["pair","id",["comp",["comp","ignore",1],"f-negate"]],"f-add"],0],["comp","ignore",2]],"f-add"],"\n\nTranslate a vector.\n"],"v2/const":[["comp","ignore",["comp",0,["pair","id","id"]]],"\n\n\n"],"v3/map2":[["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],0],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],0],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],0]]]],"\n"],"v3/scale":[["comp",["pair",["pair",["comp","ignore",0],["pair",["comp","ignore",0],["comp","ignore",0]]],"id"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]]],"\n\nScale a vector by a fixed amount.\n"],"v3/broadcast":[["pair",0,["pair",0,0]],"\n"],"v3/map":[["pair",["comp","fst",0],["pair",["comp",["comp","snd","fst"],0],["comp",["comp","snd","snd"],0]]],"\n\n"],"v3/fold":[["comp",["pair","fst",["comp","snd",0]],0],"\n"],"v3/lerp":[["comp",["comp",["pair",["comp",["pair",["comp","ignore","f-one"],["comp","id","f-negate"]],"f-add"],"id"],["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["comp",["pair",["comp","fst",["pair","id",["pair","id","id"]]],"snd"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]]]]],["comp","snd",["comp",["pair","id",["comp","ignore",1]],["comp",["pair",["comp","fst",["pair","id",["pair","id","id"]]],"snd"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]]]]]]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-add"]]]]],""],"v3/triple":[["pair",0,["pair",1,2]],"\n"],"f/mulpair":[["comp",["pair",0,1],"f-mul"],"\n\nApply multiplication to a pair of arrows.\n"],"f/dot3pair":[["comp",["pair",0,1],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"\n\nApply a dot product to a pair of arrows.\n"],"f/addpair":[["comp",["pair",0,1],"f-add"],"\n\nApply addition to a pair of arrows.\n"],"f/subpair":[["comp",["pair",0,["comp",1,"f-negate"]],"f-add"],"\n\nApply subtraction to a pair of arrows.\n"],"f/divpair":[["comp",["pair",0,1],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],"\n\nApply division to a pair of arrows.\n"],"f/ltpair":[["comp",["pair",0,1],"f-lt"],"\n\nWhether one arrow is less than another at an input value.\n"],"f/approx":[["comp",["comp",["comp",["pair",["comp","fst",0],["comp","snd","f-negate"]],"f-add"],["comp",["pair","id","id"],"f-mul"]],["comp",["pair","id",["comp","ignore",["comp",["comp",["comp",["pair","f-one",["comp",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"],["comp",["pair","id","id"],"f-mul"]]],"f-add"],["comp",["pair","id",["comp",["pair","id","id"],"f-mul"]],"f-mul"]],"f-recip"]]],"f-lt"]],"\n\nWhether the given functor is approximately equal to the input floating-point\nvalue at the input parameter. The absolute tolerance is one millionth.\n"],"f/error":[["comp",["pair",["comp","fst",0],["comp","snd","f-negate"]],"f-add"],"\n\nThe error between the output value of the given arrow at the input value and\nthe expected input value.\n"],"f/dot2pair":[["comp",["pair",0,1],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],"\n\nApply the dot product to a pair of arrows.\n"],"f/minpair":[["comp",["pair",0,1],["comp",["pair","f-lt","id"],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],"\n\nThe minimum of two arrows at an input value.\n"],"monads/iter":[["pr",["curry",["comp","snd",0]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",2]]]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],1]]]],"\n\nGiven a unit and internal bind in some monad, iterate an endomorphism in that\nmonad.\n\nFor example, to iterate in the maybe monad:\n\n (monads/iter monads/maybe/unit monads/maybe/int-bind @0)\n\nIteration can terminate early in short-circuiting monads.\n"],"monads/guard":[["comp",["pair",2,"id"],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp","ignore",1]]],["curry",["comp","snd",0]]]]]],"\n\nGiven the unit and zero of some monad, and some filtering predicate, test a\nvalue in that monad.\n"],"monads/int-comp":[["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],0]],"\n\nInternal composition in any monad, built from the internal bind.\n"],"monads/int-iter":[["uncurry",["pr",["curry",["comp","fst",["curry",["comp","snd",0]]]],["curry",["comp",["pair","snd",["uncurry","id"]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],1]]]]]],"\n\nInstead of just N, we're going to have a pair N x @2\n\nThe zero case doesn't need the RHS\n\n\n(pr\n (fun/name @0)\n (comp (pair id (fun/const (fun/name @2))) (monads/int-comp @1)))\n\nGiven a unit and internal bind in some monad, iterate an endomorphism in that\nmonad.\n\nFor example, to iterate in the maybe monad:\n\n (monads/iter monads/maybe/unit monads/maybe/int-bind @0)\n\nIteration can terminate early in short-circuiting monads.\n\n"],"monads/int-lift":[["curry",["comp",["uncurry","id"],0]],"\n\nLift an internal hom to a monad, given the unit of the monad.\n"],"monads/maybe/guard":[["comp",["pair",0,["pair","left",["comp","ignore","right"]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]],"\n\nDo nothing if a value passes a filter, otherwise fail.\n"],"monads/maybe/bind":[["comp",0,["case",1,"right"]],"\n\nBind for the maybe monad.\n"],"monads/maybe/lift":[["comp",0,"left"],"\n\nLift an arrow to the Kleisli category of the maybe monad.\n"],"monads/cost/map":[["pair",["comp","fst",0],"snd"],"\n"],"monads/cost/comp":[["comp",["comp",0,["pair",["comp","fst",1],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],"\n\n"],"monads/cost/lift":[["pair",0,["comp","ignore",["comp","zero","succ"]]],"\n"],"monads/writer/unit":[["pair","id",["comp","ignore",0]],""],"monads/writer/join":[["pair",["comp","fst","fst"],["comp",["pair",["comp","fst","snd"],"snd"],0]],""],"monads/writer/map":[["pair",["comp","fst",0],"snd"],""],"monads/subset/unit":[["curry",0],""],"monads/cont/lift":[["curry",["comp",["pair","snd",["comp","fst",0]],["uncurry","id"]]],"\n"],"bits/repeat-endo":[["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold",["curry",["comp","snd","id"]],["comp",["pair","fst",["comp","snd",["comp",["pair","id","id"],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["curry",["comp",["uncurry","id"],0]]]],["curry",["comp","snd","id"]]]]]]]],"\n\nRepeatedly apply an endomorphism.\n"],"bits/exp-sqr":[["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold",0,["comp",["pair","fst",["comp","snd",2]],["uncurry",["comp","either",["case",["curry",["comp","snd",1]],["curry",["comp","snd","id"]]]]]]]],"\n\nGiven a zero, an increment, and a doubling operation, [exponentiate by\nsquaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring).\n"],"cats/cost/curry":[["pair",["curry",["comp",0,"fst"]],["comp","ignore","zero"]],"\n\nWrong, but close enough for now.\n"],"cats/cost/uncurry":[["comp",["pair",["comp","fst",0],"snd"],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["uncurry","id"]],["comp","fst","snd"]]],"\n"],"cats/cost/pr":[["pr",0,["comp",["pair",["comp","fst",1],"snd"],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]]],"\n"],"cats/cost/comp":[["comp",["comp",0,["pair",["comp","fst",1],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],"\n"],"cats/cost/fold":[["fold",0,["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",1],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]]],"\n"],"cats/cost/case":[["case",0,1],"\n"],"cats/cost/lift":[["pair",0,["comp","ignore",["comp","zero","succ"]]],"\n"],"cats/cost/pair":[["comp",["pair",0,1],["pair",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]],"\n"],"pair/tensor":[["pair",["comp","fst",0],["comp","snd",1]],"\n\nCompose two arrows in parallel, acting on pairs of values.\n\nIn categorical jargon, the [tensor\nproduct](https://ncatlab.org/nlab/show/tensor+product) is a functor from pairs\nof arrows to arrows:\n\n$$\n\\bigotimes : C \\times C \\to C\n$$\n"],"pair/mapfst":[["pair",["comp","fst",0],"snd"],"\n\nMap over the first component of a pair.\n"],"pair/mapsnd":[["pair","fst",["comp","snd",0]],"\n\nMap over the second component of a pair.\n"],"pair/bimap":[["pair",["comp","fst",0],["comp","snd",0]],"\n\nMap uniformly over both components of a pair.\n"],"pair/of":[["comp",["pair",1,2],0],"\n\nCall an arrow of two arguments by building both arguments from a single input.\n"],"yoneda/embed":[["curry",["comp",["uncurry","id"],0]],"\n\nThe Yoneda embedding of an arrow.\n"],"yoneda/lift":[["comp",["pair","ignore","id"],["uncurry",["comp",["comp","ignore",["curry",["comp","snd","id"]]],0]]],"\n\nUndo the Yoneda embedding.\n"],"sum/mapright":[["case","left",["comp",0,"right"]],"\n\nMap over the right-hand case of a sum.\n\n"],"sum/mapleft":[["case",["comp",0,"left"],"right"],"\n\nMap over the left-hand case of a sum.\n"],"sum/par":[["case",["comp",0,"left"],["comp",1,"right"]],""],"mat3/vecpair":[["comp",["pair",0,1],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],["pair",["comp",["pair",["comp",["comp","fst","snd"],"fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],["comp",["pair",["comp",["comp","fst","snd"],"snd"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]]]],"\n"]}}
\ No newline at end of file
1+{"jets":{"dup":["pair","id","id"],"app":["uncurry","id"],"n-pred-maybe":["pr","right",["comp",["case","succ","zero"],"left"]],"n-add":["uncurry",["pr",["curry","snd"],["curry",["comp","app","succ"]]]],"n-mul":["uncurry",["pr",["curry",["comp","ignore","zero"]],["curry",["comp",["pair","app","snd"],"n-add"]]]],"n-double":["pr","zero",["comp","succ","succ"]]},"symbols":{"homv2":[1502,""],"v2hom":[1499,""],"dlist/rev":[1429,""],"dlist/append":[1466,""],"dlist/abs":[1481,""],"dlist/rep":[1490,""],"dlist/singleton":[1482,""],"dlist/to-list":[1481,""],"dlist/nil":[1,""],"tree/singleton":[1480,""],"array/split":[1470,""],"tree/tip":[1452,""],"bool/conj":[1451,""],"conal/delta":[1440,""],"conal/derivative":[1414,""],"conal/nullable":[1410,""],"f/0.05":[1409,""],"f/1.75":[1407,""],"hv2rgb":[85,"\n\nConvert a hue/value pair to a red/green/blue triple. The components are based\non the hue, then scaled by the value.\n"],"zoom-out":[107,""],"in-ellipse?":[122,""],"fstsnd":[28,""],"3b1b-newton-poly":[140,""],"sndfst":[25,""],"subset-range":[182,""],"hailstone":[234,""],"nat-mul3":[229,""],"int-fractal-maybe":[253,"\n\nLike fractal-maybe, but internal.\n"],"snoc":[255,""],"app":[63,""],"mogensen-eval":[260,""],"f-succ":[262,""],"erdos-primitive-sequence":[326,""],"stay-zoomed-out":[329,"\n"],"either-cyan-or-black":[333,""],"repeating-circles":[341,""],"f-double":[343,""],"sndsnd":[29,""],"shift-by-4":[98,"\n"],"burning-ship-detail":[381,"\n\nA nice closeup of a self-similar instance of the Burning Ship fractal along\nthe main line.\n"],"h2rgb":[75,"\n\nConvert a hue to its red, green, and blue components.\n"],"fstfst":[24,""],"fib-dyn":[382,"\n\nThe dynamics of the Fibonacci sequence.\n"],"continued-logarithm":[393,""],"odd-numbers":[394,""],"step-comp":[401,"\n\n([Y x N, Z x N + N] x [X x N, Y x N + N]) x (X x N) -> Z x N + N\n\n[Y x N, Z x N + N] x [X x N, Y x N + N] -> [X x N, Z x N + N]\n"],"triang":[404,""],"setup-step-fractal":[411,"\n\nConvert an iterative fractal to count steps until it diverges.\n"],"advance-lentz-coeffs":[429,""],"list-choose":[437,""],"enclosing":[454,"\n\nThe smallest AABB enclosing two AABBs.\n"],"morton-spread":[458,""],"bool-sum":[204,""],"nat-div2":[210,""],"3b1b-horner":[483,""],"sdf2d":[490,"\n"],"f-halve":[492,""],"app-pair-at-point":[494,""],"int/succ":[499,"\n\nThe successor of an integer.\n"],"int/abs":[500,"\n\nThe absolute value of an integer.\n"],"int/neg":[501,"\n\nThe negation of an integer.\n"],"int/zero":[502,"\n\nThe integer zero. For no particular reason, we choose positive zero.\n"],"int/zero?":[503,"\n\nWhether an integer is zero.\n"],"monoids/mul/add":[228,""],"monoids/mul/zero":[344,""],"monoids/endo/add":[507,"\n\nAddition in an endomorphism monoid.\n"],"monoids/endo/zero":[57,"\n\nThe zero of an endomorphism monoid.\n"],"monoids/add/add":[224,""],"monoids/add/zero":[141,""],"sdf3/sphere":[516,""],"nat/20":[352,""],"nat/256":[525,"\n"],"nat/pred-maybe":[160,"\n\nThe predecessor of a natural number, or a distinguished point for zero.\n"],"nat/mul":[228,"\n"],"nat/odd?":[526,"\n\nWhether a natural number is odd.\n"],"nat/3":[215,"\n"],"nat/sum":[527,"\n\nThe sum of a list of natural numbers.\n"],"nat/sum-of-sqr":[533,"\n\nThe sum of squares of natural numbers up to (but not including) the input.\n"],"nat/add":[224,"\n\nAddition of two natural numbers.\n"],"nat/exp":[524,"\n"],"nat/monus":[537,"\n"],"nat/1":[344,""],"nat/to-f":[313,"\n\nConvert a unary natural number to a floating-point number. The conversion uses\nbinary as an intermediate step to allow construction of large numbers.\n"],"nat/pred":[162,"\n\nThe predecessor of a natural number. Zero is mapped to itself.\n"],"nat/5":[348,"\n"],"nat/double-alt":[351,"\n\nDouble a natural number by counting every successor operation twice.\n"],"nat/64":[540,"\n"],"nat/fact":[546,"\n\nThe factorial function on natural numbers.\n"],"nat/7":[359,"\n"],"nat/leonardo":[548,""],"nat/lt-eq?":[557,"\n\nThe less-than-or-equal relation on natural numbers.\n"],"nat/eq?":[168,"\n\nEquality on natural numbers is decidable.\n"],"nat/4":[361,"\n"],"nat/2":[214,"\n"],"nat/fib":[548,""],"nat/double":[349,"\n\nDouble a natural number by adding it to itself.\n"],"nat/100":[369,""],"nat/horner":[567,"\n\nEvaluate a polynomial in the natural numbers with Horner's rule.\n"],"nat/9":[569,"\n"],"nat/32":[539,"\n"],"nat/cube":[573,"\n\nThe cube of a natural number.\n"],"nat/16":[538,"\n"],"nat/sqr":[368,"\n\n\n"],"nat/zero?":[153,"\n\nWhether a natural number is zero.\n"],"nat/sqr-of-sum":[575,"\n\nThe square of the sum of the natural numbers up to (but not including) the\ninput.\n"],"nat/rem":[585,""],"nat/rshift":[595,"\n\nShift all of the bits in a natural number towards the least-significant bit.\nThe least-significant bit itself is also returned.\n"],"nat/10":[350,"\n"],"nat/81":[597,"\n\n\n"],"nat/pot":[600,"\n\nThe powers of two.\n"],"nat/8":[517,"\n"],"nat/sylvester":[604,""],"nat/even?":[184,"\n\nWhether a natural number is even. Zero is even.\n"],"magma/square":[608,"\n\nA magma can be squared to produce an endomorphism.\n"],"magma/braid":[612,"\n\nBraid a magma, obtaining its opposite magma.\n"],"poly/deriv":[624,"\n\nThe derivative of a polynomial, which itself is a polynomial.\n"],"poly/nice-deriv":[626,""],"poly/zero":[127,"\n\nThe zero polynomial.\n"],"poly/order":[629,"\n\nThe largest exponent in a polynomial. \n"],"poly/const":[430,"\n\nA constant polynomial which always evaluating to the given natural number.\n"],"combinators/k":[630,""],"combinators/s":[635,""],"combinators/w":[639,""],"fun/distribr":[198,"\n\nDistribute to the right.\n"],"fun/int-comp":[507,"\n\nAn internalized version of composition.\n"],"fun/app":[63,"\n\nApply a function to a value.\n\nIn categorical jargon, this is the [evaluation\nmap](https://ncatlab.org/nlab/show/evaluation%20map).\n"],"fun/int-flip":[643,"\n"],"fun/factorr":[645,"\n\nFactor out a product from a sum.\n"],"fun/factorl":[649,"\n\nFactor out a product from a sum.\n"],"fun/distribl":[193,"\n\nDistribute to the left.\n"],"double/to-pair":[651,"\n\nConvert a double value to a pair containing a Boolean tag indicating which\nside of the double the value occupies.\n"],"double/merge":[500,"\n\nEither side of a double.\n"],"double/from-pair":[658,"\n\nConvert a pair into a double, where the first component of the pair is the\nelement to embed and the second component is a Boolean tag indicating which\nside of the sum to occupy.\n"],"baire/omega":[1,"\n\nAs a non-standard natural number, $\\omega$ is the smallest natural number\ngreater than all standard natural numbers.\n"],"baire/add":[660,"\n\nAddition of non-standard natural numbers in Baire space.\n"],"list/every-other":[676,""],"list/reverse-onto":[297,"\n\nReverse a list onto an input suffix.\n"],"list/zip":[699,"\n\nZip two lists together.\n"],"list/nil?":[700,"\n\nWhether a list is nil.\n"],"list/head":[701,"\n\nThe most exterior constructed value in a list, if it exists.\n"],"list/repeat":[708,"\n"],"list/flatten":[709,"\n\nFlatten a list of lists into a single list.\n"],"list/append":[435," \n\nConcatenate two lists into a single list.\n"],"list/evens":[715,"\n\n\n"],"list/reverse":[298,"\n\nReverse a list in linear time.\n"],"list/gauss":[716,"\n"],"list/flatmap":[709,""],"list/uncons":[686,"\n\nTry to decompose a list at its extremal cell.\n"],"list/cat_maybes":[719,"\n\nSelect the left-hand elements of a list of sums.\n"],"list/drop":[725,""],"list/double":[728,"\n\nRepeat each value in a list twice.\n"],"list/singleton":[430,"\n\nA list with only one value.\n"],"list/tail":[720,"\n\nThe tail of a list. The tail of the empty list is the empty list.\n"],"list/len":[628,"\n"],"list/tails":[737,""],"list/pair":[742,"\n\nZip a single value into a list.\n"],"list/range":[147,"\n"],"bool/pick":[252,"\n"],"bool/all?":[743,"\n\nWhether every element in a list is true.\n"],"bool/popcount":[748,"\n\nThe number of set bits in a list of bits.\n"],"bool/parity":[749,"\n\nThe parity of a list of bits.\n"],"bool/half-adder":[270,"\n\nAdd two bits, returning a pair of the result and carry bit.\n"],"bool/any?":[750,"\n\nWhether any element in a list is true.\n"],"bool/xor":[269,"\n\nThe exclusive-or operation, also known as the parity operation.\n"],"sdf2/circle":[752,"\n\n\n"],"draw/complex-fun":[765,"\n\nMap a complex number to a color. The magnitude is mapped to luminance and the\nangle is mapped to hue.\n"],"mat2/mul":[777,"\n\nMultiply two matrices.\n"],"mat2/vec":[772,"\n\nApply a matrix to a column vector.\n"],"mat2/trans":[767,"\n\nTranspose a matrix.\n"],"mat2/rotate":[783,""],"mat2/id":[785,"\n\nAn identity matrix.\n"],"square/to-pair":[788,"\n\nConvert a square to a pair.\n"],"square/from-pair":[790,"\n\nConvert a pair to a square.\n"],"extnat/succ":[791,"\n\nThe successor of an extended natural number is also an extended natural\nnumber.\n"],"extnat/pred":[806,"\n\nThe predecessor of an extended natural number. The extra point signals when\nthe input is zero.\n"],"nonempty/unfold":[817,"\n"],"nonempty/to-list":[129,"\n\nA nonempty list is a list.\n"],"fps/add":[822,"\n\nThe sum of two formal power series.\n"],"fps/diff":[826,"\n\nThe formal derivative of a formal power series.\n"],"fps/extract":[827,"\n\nExtract a coefficient from a formal power series.\n"],"fps/zero":[829,"\n\nThe zero formal power series.\n"],"weekend/image1":[833,"\n\nCode for Image 1. The viewport is from (0,0) to (1,1), but flipped\nupside-down.\n\nWhen rendering this image, flip the viewport like:\n\n 0.0 1.0 1.0 0.0\n"],"weekend/finish-quadratic2":[849,"\n\nCompute the quadratic formula, replacing $b$ with $h$ where $b = 2h$.\n"],"weekend/image2":[893,""],"weekend/image4":[933,"\n"],"weekend/discriminant":[938,"\n\nCompute the discriminant for the quadratic formula.\n"],"weekend/aim-ray":[855,""],"weekend/ray_color4":[932,"\n\n\n"],"weekend/ray_color3":[956,"\n\n\n"],"weekend/ray_color":[892,"\n"],"weekend/ray_at":[917,"\n\nAdvance a ray in time. The ray is given as a pair of origin and direction.\n"],"weekend/make-normal":[919,""],"weekend/ray_color2":[970,"\n\n\n"],"weekend/image3":[971,"\n"],"weekend/sphere_center":[894,""],"weekend/finish-quadratic":[953,"\n\nCompute the quadratic formula.\n"],"weekend/origin":[331,""],"weekend/sky":[879,"\n"],"weekend/discriminant2":[838,"\n\nCompute the discriminant for the quadratic formula. Note that $b$ is replaced\nwith $h$, where $b = 2h$.\n"],"comonads/store/duplicate":[973,""],"comonads/store/counit":[63,"\n"],"comonads/product/duplicate":[974,"\n"],"comonads/product/counit":[12,"\n"],"demo/burning-ship-color":[1008,"\n\nDraw membership for the [Burning Ship\nfractal](https://en.wikipedia.org/wiki/Burning_Ship_fractal), a relative of\nthe Mandelbrot set.\n"],"demo/metaball":[1036,"\n\n\n"],"demo/red-ellipse":[1039,"\n\n\n"],"demo/burning-ship-fast":[1080,"\n\nDraw membership for the [Burning Ship\nfractal](https://en.wikipedia.org/wiki/Burning_Ship_fractal), a relative of\nthe Mandelbrot set.\n"],"demo/mandelbrot":[1100,"\n\nDraw membership in the [Mandelbrot\nset](https://en.wikipedia.org/wiki/Mandelbrot_set).\n"],"demo/burning-ship":[1113,"\n\nDraw membership for the [Burning Ship\nfractal](https://en.wikipedia.org/wiki/Burning_Ship_fractal), a relative of\nthe Mandelbrot set.\n"],"demo/deco-circles":[1114,""],"demo/anim/red-ellipse":[1118,""],"demo/anim/hue":[1119,""],"demo/anim/ellipse-color":[1128,"\n\n\n"],"demo/anim/max-headroom":[1138,"\n"],"demo/anim/deco-circles":[1141,"\n"],"demo/anim/jupiter-storm":[1153,"\n\nA variation on the classic \"Jupiter Storm\" demo effect.\n"],"v2/polar":[1154,"\n\nConvert from rectangular coordinates to polar coordinates on the Cartesian\nplane.\n"],"v2/mandelbrot":[1086,"\n\nPerform a Mandelbrot iteration. The Mandelbrot set is composed of points\nwhich do not diverge under iteration.\n"],"v2/burning-ship":[987,"\n\nAn iteration of the Burning Ship fractal, a relative of the Mandelbrot set.\n"],"v2/scale-by":[105,""],"v2/rotate-by":[1117,""],"v2/complex/mag-2?":[242,"\n\nWhether a complex number's magnitude is less than 2.\n"],"v2/complex/norm":[240,"\n\nThe norm of a complex number.\n"],"v2/complex/mul":[474,"\n"],"v2/complex/sqrt":[1172,"\n\nThe principal square root of a complex number.\n"],"v2/complex/add":[32,""],"v2/complex/exp":[1180,"\n\nThe exponential function in the complex plane.\n"],"v2/complex/i":[784,"\n\nThe imaginary unit $i$. By convention, multiplication by $i$ corresponds to a\nquarter turn counterclockwise on the Cartesian plane.\n"],"v2/complex/one":[123,""],"v2/complex/conjugate":[314,""],"v2/complex/horner":[482,""],"v2/complex/zero":[124,""],"v2/complex/sqr":[983,"\n\n\n"],"v2/dual/mul":[1183,"\n\nMultiplication in the dual numbers.\n"],"v2/dual/e":[784,"\n\nThe epsilon unit.\n"],"v3/dot":[511,"\n\nDot product of two vectors.\n"],"v3/norm":[513,"\n\nThe length of a vector.\n"],"v3/mul":[84,"\n"],"v3/add":[34,"\n"],"v3/int-scale":[861,"\n\nScale a vector by a varying amount.\n"],"v3/sub":[898,"\n"],"v3/div":[1188,"\n"],"v3/normalise":[862,"\n\nA unit vector which points in the same direction as the input vector.\n"],"v3/centre":[1196,"\n\nThe center of an AABB.\n"],"v3/length_squared":[512,"\n\nThe positive square of the length of a vector.\n"],"v3/cross":[1223,"\n\nThe cross product of two vectors.\n"],"v3/rgb/black":[331,"\n\nThe least saturated color possible.\n"],"v3/rgb/cyan":[330,""],"v3/rgb/green":[1224,""],"v3/rgb/blue":[1225,""],"v3/rgb/red":[961,""],"v3/rgb/white":[884,"\n\nThe most saturated color which can reliably be displayed.\n"],"f/3":[10,"\n\nThree.\n"],"f/radians-to-turns":[759,"\n\nConvert radians to turns.\n"],"f/sum":[1226,"\n\nAn uncompensated sum of a list of floating-point numbers.\n"],"f/sub3":[1233,"\n\nSubtraction of two three-dimensional vectors.\n"],"f/product":[1234,""],"f/ln":[322,""],"f/abs":[64,"\n\nThe absolute value of a floating-point number.\n"],"f/sub":[315,"\n\nSubtraction of floating-point numbers.\n"],"f/5":[1144,""],"f/min":[439,"\n\nThe minimum of two floating-point numbers.\n"],"f/add2":[32,"\n\nAddition of two-dimensional vectors.\n"],"f/max":[447,"\n"],"f/e":[1235,"\n\nEuler's constant.\n"],"f/div":[17,"\n\nDivide two floating-point numbers. Division by zero yields:\n\n* $\\infty$ for positive dividends\n* $-\\infty$ for negative dividends\n* $\\pm 0$ for zero dividends\n\nSigns are respected; the result is negative when exactly one input is\nnegative, and positive otherwise.\n"],"f/euclidean3":[1236,"\n\nThe Euclidean distance between two three-dimensional vectors.\n"],"f/2pi":[756,"\n\nThe constant $2\\pi$, sometimes called $\\tau$.\n"],"f/invert-interval":[869,""],"f/eq?":[1240,""],"f/-1":[125,""],"f/4":[109,"\n\nFour.\n"],"f/mad":[423,""],"f/2":[8,"\n\nTwo.\n"],"f/add3":[34,"\n\nAddition of three-dimensional vectors.\n"],"f/negate3":[1230,"\n\nNegate a three-dimensional vector.\n"],"f/9":[91,"\n\nNine.\n"],"f/ln2":[1241,""],"f/dot2":[235,"\n\nThe dot product of two two-dimensional vectors.\n"],"f/cube":[1243,"\n\nThe cube of a floating-point number.\n"],"f/sqrt-pos":[239,"\n\nThe square root of a floating-point number, clamped to zero for negative\ninputs.\n"],"f/sqr":[90,"\n\nThe square of a floating-point number.\n"],"f/fract":[44,"\n\nThe fractional component of a floating-point number.\n"],"f/inf":[319,"\n"],"f/10":[1245,"\n\nTen.\n"],"f/half":[337,"\n\nOne half.\n"],"f/0.7":[876,"\n"],"f/disc-to-interval":[866,""],"f/1000":[1246,"\n\nOne thousand.\n"],"f/dot3":[511,"\n\nThe dot product of two three-dimensional vectors.\n"],"monads/maybe/int-bind":[1248,"\n\nAn internal version of bind for the maybe monad.\n"],"monads/maybe/unit":[158,"\n\nThe unit of the maybe monad.\n"],"monads/maybe/int-comp":[1252,"\n\nAn internalized version of composition in the Kleisli category for the maybe\nmonad.\n"],"monads/maybe/join":[1253,"\n\nThe join operation for the maybe monad.\n"],"monads/maybe/int-cps":[1257,"\n\nConvert the maybe monad to continuation-passing style. Explained at\n[n-Category\nCafé](https://golem.ph.utexas.edu/category/2012/09/where_do_monads_come_from.html#c042100).\n"],"monads/state/unit":[972,"\n"],"monads/state/join":[1259,""],"monads/list/int-bind":[1265,"\n\nInternal bind in the list monad.\n"],"monads/list/unit":[430,"\n"],"monads/list/add":[435,"\n\nAddition in the list monad.\n"],"monads/list/join":[709,"\n\nThe join operation in the list monad.\n"],"monads/list/zero":[127,"\n\nThe zero of the list monad.\n"],"monads/cost/unit":[1266,"\n"],"monads/cost/join":[1061,"\n"],"monads/cost/strength":[275,"\n\nStrength in the cost monad.\n"],"monads/cost/enrich":[1268,"\n\nEnrichment for the cost monad.\n"],"monads/logic/unit":[1271,"\n"],"monads/either/unit":[156,"\n"],"monads/either/join":[1272,"\n"],"monads/searchable/unit":[630,"\n"],"monads/reader/unit":[630,"\n"],"monads/reader/join":[1274,"\n"],"monads/step/int-bind":[1065,"\n\nAn internal version of binding in the step monad.\n"],"monads/step/unit":[1049,"\n\nThe unit of the step monad.\n"],"monads/step/from-maybe":[1275,"\n\nLift from the maybe monad to the step monad.\n"],"monads/step/increment":[1278,"\n\nTake a step if the action is successful, otherwise do nothing.\n"],"monads/writer/write":[257,""],"monads/subset/guard":[1280,""],"monads/subset/add":[179,""],"monads/subset/join":[639,""],"monads/subset/zero":[151,""],"monads/cont/unit":[1281,"\n"],"monads/cont/join":[1285,"\n\nCollapse two layers of continuations into one.\n"],"monads/cont/bind":[1290,"\n\nChain continuations together.\n"],"monads/cont/run":[1287,"\n\nRun a computation with continuations.\n"],"subobj/empty":[149,"\n\nAn empty subobject.\n"],"subobj/disj":[1292,"\n\nThe union of two subobjects.\n"],"subobj/full":[206,"\n\nA subobject that is just the original object.\n"],"subobj/conj":[1294,"\n\nThe intersection of two subobjects.\n"],"subobj/complement":[1296,"\n\nThe complement of a subobject.\n"],"pe/6":[1300,"\n\nA complete solution to [Project Euler Problem\n6](https://projecteuler.net/problem=6).\n"],"bits/succ":[288,"\n\nThe successor of a natural number is also a natural number.\n"],"bits/left-shift":[1302,""],"bits/to-f":[312,"\n\nConvert a binary natural number to a floating-point number.\n"],"bits/morton-fst":[1303,""],"bits/from-nat":[289,"\n\nConvert a natural number from unary to binary.\n"],"bits/zero":[127,"\n"],"bits/to-nat":[1308,"\n\nConvert a natural number from binary to unary.\n"],"cats/cost/f-cos":[1309,"\n"],"cats/cost/f-sin":[1310,"\n"],"cats/cost/snd":[1311,"\n"],"cats/cost/succ":[1312,"\n"],"cats/cost/f-pi":[1313,"\n"],"cats/cost/f-floor":[1314,"\n"],"cats/cost/f-lt":[1315,"\n"],"cats/cost/disj":[1316,"\n"],"cats/cost/f-negate":[1317,"\n"],"cats/cost/f-mul":[1318,"\n"],"cats/cost/n-add":[1320,"\n"],"cats/cost/fst":[1321,"\n"],"cats/cost/not":[1322,"\n"],"cats/cost/f-add":[1323,"\n"],"cats/cost/f-one":[1324,"\n"],"cats/cost/left":[407,"\n"],"cats/cost/f-sqrt":[1325,"\n"],"cats/cost/conj":[1326,"\n"],"cats/cost/f-zero":[1327,"\n"],"cats/cost/f-recip":[1328,"\n"],"cats/cost/right":[1329,"\n"],"cats/cost/f-atan2":[1330,"\n"],"cats/cost/cons":[1331,"\n"],"cats/cost/zero":[1332,"\n"],"cats/cost/n-pred-maybe":[1334,"\n"],"cats/cost/id":[1266,"\n"],"cats/cost/f-sign":[1335,"\n"],"cats/cost/t":[1336,"\n"],"cats/cost/f-exp":[1337,"\n"],"cats/cost/nil":[1338,"\n"],"cats/cost/either":[1339,"\n"],"cats/cost/ignore":[1340,"\n"],"cats/cost/f":[1341,"\n"],"lens/pair/fst":[1345,""],"fifo/empty?":[1349,"\n\nWhether a queue is empty.\n"],"fifo/refill":[1357,"\n\nPrepare a queue for a pop by refilling the pop stack.\n"],"fifo/push":[1359,"\n\nPush a value onto a queue.\n"],"fifo/pop":[1364,"\n\nPop an item from a queue, returning it in the left-hand component. The\nright-hand component is used to signal an empty queue.\n"],"fifo/nil":[1365,"\n\nAn empty queue.\n"],"scott/bool/true":[630,"\n"],"scott/bool/false":[534,"\n"],"pair/rotl":[665,""],"pair/assr":[275,"\n\nReassociate to the right.\n"],"pair/assl":[265,"\n\nReassociate to the left.\n"],"pair/dup":[2,"\n\nThe [diagonal map](https://ncatlab.org/nlab/show/diagonal+morphism).\n"],"pair/swap":[189,"\n\nSwap the first and second components of a pair.\n\nSwapping twice in a row is equivalent to the identity arrow.\n\nThis expression is the smallest with its type signature.\n"],"sum/left?":[1366,"\n"],"sum/assr":[797,"\n\nReassociate a triple sum to the right.\n"],"sum/assl":[803,"\n\nReassociate a triple sum to the left.\n"],"sum/swap":[501,"\n\nSwap the two cases of a sum.\n"],"mat3/mul":[1399,"\n"],"mat3/vec":[1391,"\n"],"mat3/trans":[1380,"\n\nTranspose a 3x3 matrix.\n"],"mat3/id":[1401,"\n\nA 3x3 identity matrix.\n"],"succ2":[1402,""],"v3/rgb/magenta":[1404,""]},"heap":["fst","id",["pair",1,1],["pair",1,2],"ignore","f-one",["pair",5,5],"f-add",["comp",6,7],["pair",5,8],["comp",9,7],["pair",8,10],"snd","f-recip",["comp",12,13],["pair",0,14],"f-mul",["comp",15,16],["comp",11,17],["comp",10,13],["pair",18,19],["pair",5,20],["comp",4,21],["pair",3,22],["comp",0,0],["comp",12,0],["pair",24,25],["comp",26,7],["comp",0,12],["comp",12,12],["pair",28,29],["comp",30,7],["pair",27,31],["comp",30,32],["pair",27,33],["comp",23,34],"f-floor","f-zero",["comp",4,37],["case",1,38],["comp",36,39],"f-negate",["comp",40,41],["pair",1,42],["comp",43,7],["comp",11,16],["comp",4,45],["pair",44,46],["comp",47,16],["comp",4,10],["comp",49,41],["pair",48,50],["comp",51,7],"f-sign","either",["comp",53,54],["comp",12,1],["curry",56],["comp",12,41],["curry",58],["case",57,59],["comp",55,60],["pair",61,1],["uncurry",1],["comp",62,63],["comp",52,64],["comp",4,5],["comp",66,41],["pair",65,67],["comp",68,7],["comp",0,69],["comp",25,69],["comp",29,69],["pair",71,72],["pair",70,73],["comp",35,74],["comp",0,75],["pair",12,12],["pair",12,77],["pair",76,78],["comp",26,16],["comp",30,16],["pair",80,81],["comp",30,82],["pair",80,83],["comp",79,84],"f-sin",["comp",4,8],["pair",86,87],["comp",88,16],["comp",2,16],["comp",10,90],["comp",4,91],"f-pi",["comp",4,93],["pair",92,94],["comp",95,16],["pair",89,96],["comp",97,7],["comp",12,98],["pair",0,99],["pair",24,12],["comp",101,16],["pair",28,12],["comp",103,16],["pair",102,104],["comp",100,105],["pair",106,12],["pair",8,8],["comp",108,7],["comp",4,109],["pair",1,110],["comp",111,16],["comp",0,112],["pair",113,12],["comp",0,90],["comp",12,90],["pair",115,116],["comp",117,7],["pair",118,66],"f-lt",["comp",119,120],["comp",114,121],["pair",5,37],["pair",37,37],["comp",5,41],["pair",125,37],"nil",["pair",123,127],"cons",["comp",128,129],["pair",126,130],["comp",131,129],["pair",123,132],["comp",133,129],["pair",124,134],["comp",135,129],["pair",124,136],["comp",137,129],["pair",123,138],["comp",139,129],"zero",["pair",141,127],"succ",["comp",0,143],["pair",144,129],["pr",142,145],["comp",146,12],"f",["comp",4,148],["comp",12,149],["curry",150],"t",["pr",152,149],["comp",12,153],["curry",154],"right",["case",143,141],"left",["comp",157,158],["pr",156,159],["case",1,141],["comp",160,161],["comp",12,162],["pair",0,163],["comp",164,63],["curry",165],["pr",155,166],["uncurry",167],["curry",168],["comp",0,169],["pair",170,12],["pair",101,103],["comp",0,63],["comp",12,63],["pair",173,174],["comp",172,175],"disj",["comp",176,177],["curry",178],["comp",171,179],["fold",151,180],["comp",147,181],"not",["pr",152,183],["pair",1,184],["comp",12,54],["pair",0,186],["comp",185,187],["pair",12,0],["curry",158],["curry",156],["case",190,191],["uncurry",192],["comp",189,193],["comp",189,158],["comp",189,156],["case",195,196],["comp",194,197],["pair",141,148],["comp",0,158],["comp",0,156],["case",200,201],["comp",198,202],["comp",187,203],["pair",143,149],["comp",4,152],["pair",1,206],["case",205,207],["comp",204,208],["pr",199,209],["comp",210,0],["comp",0,211],["comp",143,143],["comp",141,213],["comp",214,143],["comp",4,215],["pair",1,216],["comp",4,141],["curry",218],["pair",63,12],["comp",63,143],["curry",221],["pr",57,222],["uncurry",223],["comp",220,224],["curry",225],["pr",219,226],["uncurry",227],["comp",217,228],["comp",229,143],["comp",0,230],["case",212,231],["comp",198,232],["comp",188,233],["comp",82,7],["comp",2,235],"f-sqrt",["case",1,37],["comp",237,238],["comp",236,239],["pair",240,87],["comp",241,120],["comp",4,156],["pair",158,243],["pair",242,244],["curry",25],["curry",29],["case",246,247],["comp",54,248],["comp",0,249],["pair",250,12],["comp",251,63],["comp",245,252],"swap",["comp",254,129],["comp",4,57],"dup",["comp",256,257],["pair",1,258],["comp",259,63],["pair",66,1],["comp",261,7],["pair",152,127],["pair",0,25],["pair",264,29],"conj",["comp",266,183],["pair",177,267],["comp",268,266],["pair",269,266],["comp",270,189],["comp",0,271],["pair",272,12],["comp",265,273],["pair",24,103],["comp",12,129],["pair",0,276],["comp",275,277],["comp",274,278],["fold",263,279],["pair",206,1],["comp",281,129],["comp",12,282],["curry",283],["case",284,57],["comp",54,285],["uncurry",286],["comp",280,287],["pr",127,288],["comp",4,127],["pair",1,290],["comp",101,129],["pair",28,292],["comp",293,63],["curry",294],["fold",57,295],["uncurry",296],["comp",291,297],["pair",1,87],["comp",299,16],["comp",12,300],["pair",0,301],["pair",1,66],["comp",303,7],["comp",12,304],["curry",305],["case",306,57],["comp",54,307],["uncurry",308],["comp",302,309],["fold",37,310],["comp",298,311],["comp",289,312],["pair",0,58],["comp",314,7],["comp",303,315],"f-log1p",["comp",316,317],["comp",37,13],["comp",319,41],["case",1,320],["comp",318,321],["pair",1,322],["comp",323,16],["comp",324,13],["comp",313,325],["comp",299,105],["comp",0,327],["pair",328,12],["pair",37,6],["pair",37,124],["case",330,331],["comp",54,332],["comp",0,44],["comp",12,44],["pair",334,335],["comp",8,13],["comp",4,337],["pair",240,338],["comp",339,120],["comp",336,340],["pair",87,1],["comp",342,16],["comp",141,143],["comp",344,143],["comp",345,143],["comp",346,143],["comp",347,143],["comp",2,224],["comp",348,349],["pr",141,213],["comp",350,351],["comp",313,13],["comp",352,353],["comp",4,354],["pair",1,355],["comp",356,105],["pair",214,348],["comp",358,224],["comp",214,2],["comp",360,224],["pair",359,361],["comp",0,313],["comp",12,313],["pair",363,364],["comp",362,365],["comp",366,17],["comp",2,228],["comp",350,368],["pair",215,369],["comp",370,365],["comp",371,17],["comp",372,41],["pair",367,373],["comp",4,374],["pair",1,375],["comp",26,315],["comp",30,315],["pair",377,378],["comp",376,379],["comp",357,380],["pair",12,224],["comp",12,343],["curry",383],["comp",13,262],["comp",12,385],["curry",386],["case",384,387],["comp",54,388],["comp",0,389],["pair",390,12],["comp",391,63],["fold",5,392],["comp",349,143],["comp",103,63],["pair",24,395],["comp",396,198],["comp",12,156],["case",63,398],["comp",397,399],["curry",400],["pair",1,143],["comp",402,228],["comp",403,211],["comp",63,253],["comp",4,344],["pair",158,406],["pair",156,218],["case",407,408],["comp",405,409],["curry",410],["comp",0,13],["pair",412,12],["comp",0,413],["comp",313,257],["comp",0,415],["comp",12,415],["pair",416,417],["comp",12,418],["pair",414,419],["comp",0,16],["pair",421,12],["comp",422,7],["comp",265,423],["comp",26,424],["comp",30,424],["pair",425,426],["comp",427,15],["comp",420,428],["comp",291,129],["comp",0,430],["pair",431,12],["comp",0,298],["pair",433,12],["comp",434,297],["comp",432,435],["fold",127,436],["pair",120,1],["comp",438,252],["comp",26,439],["comp",30,439],["pair",440,441],["comp",30,442],["pair",440,443],["comp",26,444],["pair",120,189],["comp",446,252],["comp",26,447],["comp",30,447],["pair",448,449],["comp",30,450],["pair",448,451],["comp",30,452],["pair",445,453],["pair",149,1],["comp",455,129],["comp",129,456],["fold",127,457],["comp",4,140],["pair",459,1],["comp",4,124],["comp",12,461],["curry",462],["pair",396,12],["comp",81,41],["pair",80,465],["comp",466,7],["pair",28,25],["comp",468,16],["pair",24,29],["comp",470,16],["pair",469,471],["comp",472,7],["pair",467,473],["comp",103,474],["pair",475,24],["comp",476,32],["comp",464,477],["curry",478],["fold",463,479],["uncurry",480],["comp",434,481],["comp",460,482],["pair",1,38],["comp",484,120],["case",37,5],["comp",54,486],["comp",485,487],["pair",488,1],["pair",1,489],["pair",338,1],["comp",491,16],["pair",28,101],["comp",493,63],["comp",143,158],["comp",344,158],["case",156,496],["comp",160,497],["case",495,498],["case",1,1],["case",156,158],["comp",141,158],["case",153,153],["pair",0,174],["comp",275,504],["comp",505,63],["curry",506],["comp",12,7],["pair",0,508],["comp",509,7],["comp",84,510],["comp",2,511],["comp",512,239],["pair",1,67],["comp",514,7],["comp",513,515],["comp",361,351],["pair",517,214],["comp",218,143],["curry",519],["comp",220,228],["curry",521],["pr",520,522],["uncurry",523],["comp",518,524],["comp",184,183],["fold",141,224],["comp",0,368],["pair",528,12],["comp",529,129],["fold",127,530],["comp",531,527],["comp",147,532],["curry",12],["comp",63,162],["curry",535],["pr",534,536],["comp",517,351],["comp",538,351],["comp",539,349],["comp",141,402],["pair",144,12],["pair",0,228],["comp",542,543],["pr",541,544],["comp",545,12],["pr",541,382],["comp",547,0],["curry",206],["comp",12,160],["pair",0,550],["comp",551,198],["case",63,149],["comp",552,553],["curry",554],["pr",549,555],["uncurry",556],["comp",12,218],["curry",558],["comp",103,228],["pair",560,24],["comp",561,224],["comp",464,562],["curry",563],["fold",559,564],["uncurry",565],["comp",434,566],["pair",214,215],["comp",568,524],["comp",12,368],["pair",0,570],["comp",2,571],["comp",572,228],["comp",527,368],["comp",147,574],["pair",221,12],["pair",168,0],["case",559,57],["comp",54,578],["uncurry",579],["comp",577,580],["comp",576,581],["curry",582],["pr",559,583],["uncurry",584],["comp",12,205],["curry",586],["comp",12,207],["curry",588],["case",587,589],["comp",54,590],["comp",12,591],["pair",592,0],["comp",593,63],["pr",199,594],["pair",214,569],["comp",596,524],["comp",519,143],["pair",1,598],["comp",599,524],["pair",162,1],["comp",601,228],["comp",602,143],["pr",214,603],["comp",12,2],["pair",0,605],["comp",606,63],["curry",607],["comp",12,189],["pair",0,609],["comp",610,63],["curry",611],["comp",25,143],["comp",0,228],["pair",614,12],["comp",265,615],["comp",616,129],["pair",613,617],["pair",344,127],["comp",12,619],["case",618,620],["comp",198,621],["comp",622,158],["fold",156,623],["case",12,127],["comp",624,625],["comp",12,143],["fold",141,627],["comp",628,162],["curry",0],["comp",101,63],["pair",631,395],["comp",632,63],["curry",633],["curry",634],63,["pair",636,12],["comp",637,636],["curry",638],["pair",631,28],["comp",640,63],["curry",641],["curry",642],["case",12,12],["pair",202,644],["case",0,0],["comp",12,158],["case",647,398],["pair",646,648],["pair",1,149],["case",207,650],["curry",647],["curry",398],["case",652,653],["comp",54,654],["comp",12,655],["pair",656,0],["comp",657,63],["comp",632,224],["curry",659],["pair",148,127],["comp",0,254],["pair",662,12],["comp",663,275],["comp",265,664],["pair",149,12],["comp",12,666],["curry",667],["pair",206,129],["comp",12,669],["curry",670],["case",668,671],["comp",54,672],["uncurry",673],["comp",665,674],["fold",661,675],["comp",12,290],["curry",677],["case",129,127],["comp",679,158],["comp",12,680],["pair",0,681],["case",158,243],["comp",198,683],["comp",682,684],["fold",156,685],["comp",12,686],["pair",0,687],["comp",30,63],["pair",26,689],["comp",690,129],["pair",28,290],["comp",692,63],["case",691,693],["comp",198,694],["comp",688,695],["curry",696],["fold",678,697],["uncurry",698],["fold",152,149],["fold",156,200],["pair",12,63],["comp",702,129],["curry",703],["pr",678,704],["comp",12,705],["pair",706,0],["comp",707,63],["fold",127,435],["comp",0,184],["pair",129,12],["pair",710,711],["comp",712,252],["fold",127,713],["comp",147,714],["comp",147,527],["case",129,12],["comp",193,717],["fold",127,718],["comp",686,625],["comp",12,720],["pair",0,721],["comp",722,63],["curry",723],["pr",57,724],["pair",0,129],["comp",726,129],["fold",127,727],["pair",290,127],["comp",729,129],["pair",127,730],["comp",264,129],["pair",732,29],["comp",733,129],["pair",732,734],["fold",731,735],["comp",736,12],["pair",101,395],["comp",738,129],["curry",739],["fold",678,740],["uncurry",741],["fold",152,266],["curry",627],["case",744,57],["comp",54,745],["uncurry",746],["fold",141,747],["fold",148,269],["fold",148,177],["pair",240,67],["comp",751,7],"f-atan2",["comp",189,753],["pair",8,93],["comp",755,16],["comp",4,756],["pair",1,757],["comp",758,17],["comp",754,759],["pair",760,338],["comp",761,7],["comp",241,16],["pair",762,763],["comp",764,85],["comp",0,1],["pair",26,30],["comp",12,767],["pair",766,768],["comp",101,235],["comp",103,235],["pair",770,771],["comp",264,772],["pair",0,29],["comp",774,772],["pair",773,775],["comp",769,776],"f-cos",["pair",86,778],["comp",0,41],["pair",12,780],["pair",781,1],["comp",779,782],["pair",37,5],["pair",123,784],["comp",207,63],["comp",650,63],["pair",786,787],["comp",189,252],["curry",789],["case",495,156],["comp",160,158],["case",792,156],["comp",158,156],["case",158,794],["comp",156,156],["case",795,796],["comp",501,156],["case",158,798],["comp",158,158],["comp",156,158],["case",801,156],["case",800,802],["comp",799,803],["comp",797,804],["comp",793,805],["pair",0,290],["comp",12,807],["curry",808],["pair",63,29],["pair",12,24],["comp",811,63],["comp",0,129],["pair",812,813],["comp",810,814],["curry",815],["pr",809,816],["comp",26,63],["pair",818,689],["comp",606,819],["comp",820,224],["curry",821],["pair",0,627],["comp",823,220],["comp",824,228],["curry",825],["comp",189,63],["comp",0,141],["curry",828],["comp",109,13],["comp",4,830],["pair",12,831],["pair",0,832],["comp",25,90],["comp",774,16],["comp",835,41],["pair",834,836],["comp",837,7],["comp",838,237],["pair",264,839],["comp",840,198],["comp",28,41],["pair",842,58],["comp",843,7],["pair",844,24],["comp",845,17],["comp",846,158],["case",847,243],["comp",841,848],["comp",4,331],["pair",37,125],["comp",851,7],["comp",4,852],["pair",12,853],["pair",0,854],["pair",850,855],["comp",513,13],["pair",857,1],["comp",0,3],["pair",859,12],["comp",860,84],["comp",858,861],["comp",12,862],["comp",863,25],["pair",262,87],["comp",865,17],["comp",1,41],["pair",66,867],["comp",868,7],["comp",866,869],["comp",864,870],["pair",869,1],["comp",359,313],["comp",350,313],["pair",873,874],["comp",875,17],["comp",4,876],["pair",877,66],["pair",338,878],["comp",4,879],["pair",1,880],["comp",881,861],["comp",0,882],["pair",5,6],["comp",4,884],["pair",1,885],["comp",886,861],["comp",12,887],["pair",883,888],["comp",872,889],["comp",890,34],["comp",871,891],["comp",856,892],["pair",37,851],["comp",4,894],["pair",1,895],["comp",30,379],["pair",377,897],["comp",896,898],["comp",0,899],["pair",900,12],["comp",12,512],["comp",0,512],["comp",338,90],["comp",904,41],["pair",903,905],["comp",906,7],["pair",511,907],["pair",902,908],["comp",901,909],["comp",910,849],["pair",1,911],["comp",189,861],["comp",12,913],["pair",0,914],["comp",915,34],["comp",275,916],["pair",917,895],["comp",918,898],["comp",0,866],["comp",25,866],["comp",29,866],["pair",921,922],["pair",920,923],["comp",919,924],["comp",28,862],["comp",926,25],["comp",927,870],["comp",928,891],["case",925,929],["comp",198,930],["comp",912,931],["comp",856,932],["pair",110,835],["comp",934,16],["comp",935,41],["pair",834,936],["comp",937,7],["pair",87,511],["comp",939,16],["pair",940,907],["pair",902,941],["comp",901,942],["comp",938,237],["pair",264,944],["comp",945,198],["pair",24,87],["comp",947,16],["pair",844,948],["comp",949,17],["comp",950,158],["case",951,243],["comp",946,952],["comp",943,953],["pair",1,954],["comp",955,931],["comp",943,938],["pair",38,957],["comp",958,120],["pair",959,1],["pair",5,124],["comp",4,961],["comp",12,962],["curry",963],["comp",12,892],["curry",965],["case",964,966],["comp",54,967],["uncurry",968],["comp",960,969],["comp",856,970],["curry",1],["pair",972,1],["pair",0,1],["comp",540,143],["comp",975,817],["comp",4,976],["comp",38,2],["comp",0,64],["comp",12,64],["pair",979,980],["comp",12,981],["comp",2,474],["comp",982,983],["pair",0,984],["comp",985,32],["curry",986],["pair",978,987],["pair",977,988],["comp",989,63],["comp",990,12],["comp",0,242],["pair",992,711],["comp",993,252],["fold",127,994],["comp",995,628],["comp",991,996],["comp",4,540],["pair",1,998],["comp",999,557],["pair",1000,244],["comp",1001,252],["comp",997,1002],["comp",381,1003],["comp",313,759],["comp",1005,75],["case",1006,331],["comp",1004,1007],["comp",830,2],["pair",1009,19],["pair",126,337],["pair",1011,127],["comp",1012,129],["pair",1010,1013],["comp",1014,129],["comp",4,1015],["comp",12,38],["curry",1017],["comp",24,12],["comp",24,0],["pair",1020,12],["comp",1021,379],["comp",1022,240],["pair",1019,1023],["comp",1024,17],["pair",1025,395],["comp",1026,7],["curry",1027],["fold",1018,1028],["comp",1016,1029],["pair",1030,1],["comp",1031,63],["comp",831,41],["pair",1032,1033],["comp",1034,7],["comp",1035,490],["comp",122,54],["case",961,884],["comp",1037,1038],["pair",4,1],["comp",12,411],["curry",1041],["comp",4,1042],["comp",37,2],["comp",1044,987],["pair",1043,1045],["comp",1046,63],["pair",517,1047],["pair",158,218],["comp",12,1049],["curry",1050],["comp",0,1051],["curry",1052],["pair",395,24],["comp",275,193],["pair",29,0],["comp",1056,63],["pair",1057,25],["comp",12,224],["pair",0,1059],["comp",275,1060],["comp",1058,1061],["pair",243,25],["case",1062,1063],["comp",1055,1064],["comp",1054,1065],["curry",1066],["comp",702,1067],["curry",1068],["pr",1053,1069],["uncurry",1070],["comp",1048,1071],["uncurry",1072],["comp",1040,1073],["comp",1074,193],["comp",12,1006],["pair",66,66],["pair",66,1077],["case",1076,1078],["comp",1075,1079],["comp",525,817],["comp",4,1081],["comp",12,983],["pair",0,1083],["comp",1084,32],["curry",1085],["pair",978,1086],["pair",1082,1087],["comp",1088,63],["comp",1089,12],["comp",525,313],["comp",4,1091],["pair",313,1092],["comp",1093,17],["comp",628,1094],["comp",995,1095],["comp",1090,1096],["pair",869,869],["pair",869,1098],["comp",1097,1099],["comp",540,817],["comp",4,1101],["pair",1102,988],["comp",1103,63],["comp",1104,12],["comp",540,313],["comp",4,1106],["pair",313,1107],["comp",1108,17],["comp",628,1109],["comp",995,1110],["comp",1105,1111],["comp",1112,1099],["comp",341,333],["comp",12,783],["pair",1115,0],["comp",1116,772],["comp",1117,1039],["comp",12,75],["comp",0,122],["pair",1120,12],["curry",1119],["comp",12,885],["curry",1123],["case",1122,1124],["comp",54,1125],["uncurry",1126],["comp",1121,1127],["pair",1,94],["comp",1129,17],["comp",12,1130],["pair",0,1131],["comp",1132,1117],["comp",107,1133],["comp",0,86],["pair",1135,38],["pair",38,1136],["comp",1134,1137],["comp",329,1133],["comp",1139,341],["comp",1140,333],["comp",0,7],["pair",109,5],["comp",1143,7],["pair",1144,8],["comp",1145,17],["comp",4,1146],["pair",86,1147],["comp",1148,7],["comp",12,1149],["pair",1142,1150],["comp",17,75],["comp",1151,1152],["pair",240,753],["comp",12,53],["pair",240,0],["pair",7,315],["comp",1156,1157],["pair",1,338],["comp",1159,16],["comp",1160,239],["comp",0,1161],["comp",12,1161],["pair",1162,1163],["comp",1158,1164],["pair",1155,1165],["comp",12,314],["curry",1167],["case",57,1168],["comp",54,1169],["uncurry",1170],["comp",1166,1171],"f-exp",["comp",0,1173],["pair",778,86],["comp",12,1175],["pair",1174,1176],["comp",264,16],["pair",1178,835],["comp",1177,1179],["pair",471,469],["comp",1181,7],["pair",80,1182],["comp",26,17],["comp",30,17],["pair",1184,1185],["comp",30,1186],["pair",1184,1187],["comp",189,898],["pair",338,338],["pair",338,1190],["pair",1191,1],["comp",1192,84],["comp",1189,1193],["pair",0,1194],["comp",1195,34],["comp",0,25],["comp",12,29],["pair",1197,1198],["comp",1199,16],["comp",0,29],["comp",12,25],["pair",1201,1202],["comp",1203,16],["comp",1204,41],["pair",1200,1205],["comp",1206,7],["pair",1201,25],["comp",1208,16],["pair",24,1198],["comp",1210,16],["comp",1211,41],["pair",1209,1212],["comp",1213,7],["pair",24,1202],["comp",1215,16],["pair",1197,25],["comp",1217,16],["comp",1218,41],["pair",1216,1219],["comp",1220,7],["pair",1214,1221],["pair",1207,1222],["pair",37,123],["pair",37,784],["fold",37,7],["comp",25,41],["comp",29,41],["pair",1227,1228],["pair",780,1229],["comp",12,1230],["pair",0,1231],["comp",1232,34],["fold",5,16],["comp",5,1173],["comp",1233,513],["comp",254,120],["pair",120,1237],["comp",1238,177],["comp",1239,183],["comp",8,322],["pair",1,90],["comp",1242,16],["pair",5,91],["comp",1244,7],["comp",1245,1243],["case",827,243],["comp",193,1247],["case",63,243],["comp",198,1249],["comp",505,1250],["curry",1251],["case",1,156],["pair",25,0],["comp",1254,63],["curry",1255],["case",1256,247],["comp",636,636],["curry",1258],["comp",0,827],["pair",1260,12],["comp",1261,129],["fold",127,1262],["comp",742,1263],["comp",1264,709],["pair",1,218],["pair",173,627],["comp",265,1267],["pair",25,774],["comp",1269,63],["curry",1270],["case",158,1],["comp",220,63],["curry",1273],["case",1049,408],["comp",823,158],["case",1276,398],["comp",193,1277],["comp",254,12],["curry",1279],["curry",827],["comp",12,1281],["pair",0,1282],["comp",1283,63],["curry",1284],["pair",1,256],["comp",1286,63],["comp",0,1287],["pair",12,1288],["comp",1289,63],["comp",632,177],["curry",1291],["comp",632,266],["curry",1293],["comp",63,183],["curry",1295],["pair",533,575],["uncurry",537],["comp",1297,1298],["comp",143,1299],["comp",661,129],["fold",1301,129],["comp",676,12],["comp",12,349],["pair",0,1304],["comp",1305,747],["fold",141,1306],["comp",298,1307],["pair",778,406],["pair",86,406],["pair",12,406],["pair",143,406],["comp",93,1266],["pair",36,406],["pair",120,406],["pair",177,406],["pair",41,406],["pair",16,406],"n-add",["pair",1319,406],["pair",0,406],["pair",183,406],["pair",7,406],["comp",5,1266],["pair",237,406],["pair",266,406],["comp",37,1266],["pair",13,406],["pair",156,406],["pair",753,406],["pair",129,406],["comp",141,1266],"n-pred-maybe",["pair",1333,406],["pair",53,406],["comp",152,1266],["pair",1173,406],["comp",127,1266],["pair",54,406],["comp",4,1266],["comp",148,1266],["pair",12,28],["comp",12,1342],["curry",1343],["pair",246,1344],["comp",0,700],["comp",12,700],["pair",1346,1347],["comp",1348,266],["pair",1347,1],["pair",290,433],["comp",12,1351],["curry",1352],["case",1353,57],["comp",54,1354],["uncurry",1355],["comp",1350,1356],["comp",811,129],["pair",1358,28],["comp",1357,688],["comp",1269,158],["case",1361,398],["comp",198,1362],["comp",1360,1363],["pair",127,127],["case",206,149],["comp",25,0],["comp",29,0],["pair",1367,1368],["pair",24,1369],["comp",25,25],["comp",29,25],["pair",1371,1372],["pair",1197,1373],["comp",25,29],["comp",29,29],["pair",1375,1376],["pair",1201,1377],["pair",1374,1378],["pair",1370,1379],["comp",12,1380],["pair",766,1381],["comp",101,511],["comp",28,0],["pair",1384,12],["comp",1385,511],["comp",28,12],["pair",1387,12],["comp",1388,511],["pair",1386,1389],["pair",1383,1390],["comp",264,1391],["pair",0,1202],["comp",1393,1391],["pair",0,1198],["comp",1395,1391],["pair",1394,1396],["pair",1392,1397],["comp",1382,1398],["pair",1224,1225],["pair",961,1400],["comp",143,143],["pair",37,5],["pair",5,1403],["comp",361,313],["pair",873,1405],["comp",1406,17],["comp",352,313],["comp",1408,13],["comp",291,63],["comp",103,435],["pair",24,1411],["comp",1412,63],["curry",1413],["pair",1,127],["comp",1415,129],["comp",12,1416],["pair",0,1417],["comp",1418,1414],["comp",12,430],["pair",0,1420],["comp",1421,1414],["pair",12,290],["comp",1423,129],["pair",0,1424],"app",["comp",293,1426],["curry",1427],["fold",534,1428],["pair",1429,290],["comp",1430,1426],["comp",1431,1429],["comp",12,1432],["comp",0,1433],["pair",1434,12],["comp",1435,1426],["pair",24,1436],["comp",1437,1426],["curry",1438],["comp",1425,1439],["comp",187,198],["case",0,149],["comp",1441,1442],["comp",186,192],["pair",1444,0],["comp",1445,1426],["comp",254,158],["comp",254,156],["case",1447,1448],["comp",1446,1449],["comp",1450,1442],["tfold",156,200],["comp",4,246],["pair",1,1453],["comp",1454,507],["pair",1453,1],["comp",1456,507],["comp",4,247],["pair",1458,1],["comp",1459,507],["pair",1457,1460],["pair",246,1],["comp",103,1426],["pair",24,1463],["comp",1464,1426],["curry",1465],["comp",1462,1466],["pair",247,1],["comp",1468,1466],["pair",1467,1469],"tnil",["comp",4,1471],["comp",1472,257],["pair",1,1473],"tcons",["comp",1474,1475],["comp",1471,257],["comp",4,1477],["pair",1,1478],["comp",1479,1475],["comp",291,1426],["curry",129],["comp",1482,1481],["comp",348,430],["curry",435],["comp",0,1431],["comp",1486,1429],["pair",1487,12],["comp",1488,1426],["curry",1489],["comp",1490,1481],["comp",254,1466],["fold",57,1428],["comp",254,252],["curry",1494],["comp",12,249],["pair",1496,0],["comp",1497,1426],["curry",1498],["comp",207,1426],["comp",650,1426],["pair",1500,1501],["comp",1499,1502],["comp",1502,1499]],"templates":{"max-headroom-camera":[["comp",0,["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore","f-pi"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]]],["comp",["pair",["comp","snd",["comp",["pair","f-sin","f-cos"],["pair",["pair","snd",["comp","fst","f-negate"]],"id"]]],"fst"],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp",["pair",["comp","fst","snd"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]]]]]],"\n"],"fractal-membership":[["comp",["comp",["comp",["pair",["comp","ignore",["comp",1,["pr",["curry",["comp","snd",["pair","fst",["comp","ignore","nil"]]]],["curry",["comp",["pair",["uncurry","id"],["comp","snd","snd"]],["pair",["comp",["pair","snd",["comp","fst","fst"]],["uncurry","id"]],["comp","fst","cons"]]]]]]],["pair",["comp",["comp","ignore","f-zero"],["pair","id","id"]],0]],["uncurry","id"]],"snd"],["comp",["fold","nil",["comp",["pair",["comp","fst",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"]],["pair","cons","snd"]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["comp",["fold","zero",["comp","snd","succ"]],["comp",["pair",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]],["comp","ignore",["comp",1,["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]]]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]]]],"\n\nMeasure the degree to which a fractal diverges. Given a maximum number of\nsteps, we iterate the IFS for a fractal in the complex plane until its\nabsolute value exceeds 2, and return a value in [0,1] indicating how many\nsteps were taken before divergence.\n"],"monad-choose":[["fold",0,["comp",["pair",["comp","fst",1],"snd"],2]],""],"l":[["comp",["pair",0,1],"cons"],""],"fractal-maybe":[["comp",["comp",0,["pair",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"],["pair","left",["comp","ignore","right"]]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]],"\n\nTake a step in an IFS, failing if the step has magnitude 2 or greater.\n"],"pick-const":[["comp","either",["case",0,1]],""],"iter-fractal-fast":[["comp",["pair","ignore","id"],["uncurry",["comp",["pair",0,["comp",["pair",["comp","ignore",["curry",["comp","snd",["curry",["comp",["comp",["uncurry","id"],["comp",["pair",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"],["pair","left",["comp","ignore","right"]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["case",["pair","left",["comp","ignore",["comp","zero","succ"]]],["pair","right",["comp","ignore","zero"]]]]]]]],["comp",["comp","f-zero",["pair","id","id"]],1]],["uncurry","id"]]],["uncurry",["pr",["curry",["comp","fst",["curry",["comp","snd",["pair","left",["comp","ignore","zero"]]]]]],["curry",["comp",["pair","snd",["uncurry","id"]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair",["comp",["pair",["comp","snd","snd"],"fst"],["uncurry","id"]],["comp","snd","fst"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],["pair",["comp","ignore","right"],["comp","snd","fst"]]]]]]]]]]]]],"\n\nGiven a maximum number of steps, iterate the given fractal.\n"],"graph-fun":[["comp",0,["pair","id",["pair","id",["comp","ignore","f-one"]]]],"\n\nGraph a real function on the plane. When interpreted as a red/green/blue\ntriple, the codomain varies from blue to white as the value of the function\nvaries from zero to one.\n"],"fractal-membership-fast":[["comp",["comp",["comp",["pair","ignore","id"],["uncurry",["comp",["pair",1,["comp",["pair",["comp","ignore",["curry",["comp","snd",["curry",["comp",["comp",["uncurry","id"],["comp",["pair",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"],["pair","left",["comp","ignore","right"]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["case",["pair","left",["comp","ignore",["comp","zero","succ"]]],["pair","right",["comp","ignore","zero"]]]]]]]],["comp",["comp","f-zero",["pair","id","id"]],0]],["uncurry","id"]]],["uncurry",["pr",["curry",["comp","fst",["curry",["comp","snd",["pair","left",["comp","ignore","zero"]]]]]],["curry",["comp",["pair","snd",["uncurry","id"]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair",["comp",["pair",["comp","snd","snd"],"fst"],["uncurry","id"]],["comp","snd","fst"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],["pair",["comp","ignore","right"],["comp","snd","fst"]]]]]]]]]]]]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp","snd",["comp",["comp",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]],["comp",["pair","id",["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],"f-pi"],"f-mul"]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]],["comp",["comp",["pair",["pair","id",["pair","id","id"]],["comp","ignore",["pair","f-one",["pair",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],["comp",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"],"f-recip"]]]]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-add"]]]]],["pair",["comp","fst",["comp",["pair",["comp",["comp",["pair",["comp",["pair",["comp",["pair","id",["comp",["comp","f-floor",["case","id",["comp","ignore","f-zero"]]],"f-negate"]],"f-add"],["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-mul"]]],"f-mul"],["comp",["comp","ignore",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","ignore","f-one"],"f-negate"]],"f-add"]],["pair",["comp",["comp","snd","fst"],["comp",["pair",["comp",["comp",["pair",["comp",["pair",["comp",["pair","id",["comp",["comp","f-floor",["case","id",["comp","ignore","f-zero"]]],"f-negate"]],"f-add"],["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-mul"]]],"f-mul"],["comp",["comp","ignore",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","ignore","f-one"],"f-negate"]],"f-add"]],["comp",["comp","snd","snd"],["comp",["pair",["comp",["comp",["pair",["comp",["pair",["comp",["pair","id",["comp",["comp","f-floor",["case","id",["comp","ignore","f-zero"]]],"f-negate"]],"f-add"],["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-mul"]]],"f-mul"],["comp",["comp","ignore",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],"f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","ignore","f-one"],"f-negate"]],"f-add"]]]]]]],["pair",["comp","ignore","f-one"],["pair",["comp","ignore","f-one"],["comp","ignore","f-one"]]]]],"\n\nIterate a fractal for a maximum number of steps, and return a value in $[0,1]$\nindicating how many steps were taken, with 1 indicating that the fractal did\nnot diverge.\n"],"swap-curry":[["curry",["comp","swap",["uncurry",0]]],""],"fractal-membership-color":[["comp",["comp",["comp",["pair",["comp","ignore",["comp",1,["pr",["curry",["comp","snd",["pair","fst",["comp","ignore","nil"]]]],["curry",["comp",["pair",["uncurry","id"],["comp","snd","snd"]],["pair",["comp",["pair","snd",["comp","fst","fst"]],["uncurry","id"]],["comp","fst","cons"]]]]]]],["pair",["comp",["comp","ignore","f-zero"],["pair","id","id"]],0]],["uncurry","id"]],"snd"],["comp",["fold","nil",["comp",["pair",["comp","fst",["comp",["pair",["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-lt"]],["pair","cons","snd"]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],["fold","zero",["comp","snd","succ"]]]],"\n\nLike fractal-membership, but just returning the length so that we can\nfalse-color it.\n"],"dynamics":[["pair",["comp","fst",["comp",["pair",["curry",["comp","snd",0]],"id"],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]],"snd"],"\n\nThe dynamics of a deterministic automaton. The second component of the pair is\nleft free, but usually is a status value, like a Boolean.\n"],"setup-viewport":[["comp",["comp",["pair","id",["comp","ignore",1]],["pair",["comp",["pair",["comp","fst","fst"],"snd"],"f-mul"],["comp",["pair",["comp","fst","snd"],"snd"],"f-mul"]]],["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]],"\n\nSet up a preferred viewport for 2D rendering. The viewport is centered at the\ngiven location, and drawn with at least the given radius circumscribed within\nthe rendering box.\n"],"take-step":[["comp",["comp",["pair",["comp","fst",0],["comp","snd","succ"]],["uncurry",["case",["curry","left"],["curry","right"]]]],["case","left",["comp","snd","right"]]],"\n\nTake a step along a partial arrow, incrementing the number of steps taken.\n"],"subset-choose":[["fold",["curry",["comp","snd",["comp","ignore","f"]]],["comp",["pair",["comp","fst",["curry",0]],"snd"],["curry",["comp",["comp",["pair",["pair",["comp","fst","fst"],"snd"],["pair",["comp","fst","snd"],"snd"]],["pair",["comp","fst",["uncurry","id"]],["comp","snd",["uncurry","id"]]]],"disj"]]]],""],"sub-v2-by-const":[["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]],""],"apply-moore-machine":[["comp",["fold",["pair","nil",0],["pair",["comp",["pair",["comp",["comp","snd","snd"],1],["comp","snd","fst"]],"cons"],["comp",["pair",["comp","snd","snd"],"fst"],2]]],"fst"],""],"scale-v2-by-const":[["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],"snd"],"f-mul"],["comp",["pair",["comp","fst","snd"],"snd"],"f-mul"]]],""],"ratio":[["comp",["comp",["pair",0,1],["pair",["comp","fst",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]]],["comp","snd",["comp",["pr","nil",["comp",["fold",["pair","t","nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",["comp",["pair",["comp",["pair","disj",["comp","conj","not"]],"conj"],"conj"],["pair","snd","fst"]]],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd","cons"]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair",["comp","ignore","t"],"id"],"cons"]]],["curry",["comp","snd","id"]]]]]]],["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold","f-zero",["comp",["pair","fst",["comp","snd",["comp",["pair","id",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp",["pair","id",["comp","ignore","f-one"]],"f-add"]]],["curry",["comp","snd","id"]]]]]]]]]]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],""],"with-default":[["comp",0,["case","id",1]],""],"maybe-step":[["comp",0,["case",["comp",["pair","id",["comp","ignore",["comp","zero","succ"]]],"left"],["comp","zero","right"]]],"\n"],"iter-fractal":[["comp",["comp",["pair",["comp","ignore",["comp",1,["pr",["curry",["comp","snd",["pair","fst",["comp","ignore","nil"]]]],["curry",["comp",["pair",["uncurry","id"],["comp","snd","snd"]],["pair",["comp",["pair","snd",["comp","fst","fst"]],["uncurry","id"]],["comp","fst","cons"]]]]]]],["pair",["comp",["comp","ignore","f-zero"],["pair","id","id"]],0]],["uncurry","id"]],"snd"],"\n\nIterate an [IFS](https://en.wikipedia.org/wiki/Iterated_function_system) for a\ngiven number of steps.\n"],"nat/do-if-not-zero":[["comp",["comp",["pair","id",["pr","t",["comp","ignore","f"]]],"swap"],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp","ignore","right"]]],["curry",["comp","snd",["comp",0,"left"]]]]]]],"\n"],"nat/kata":[["pr",0,1],""],"nat/para":[["comp",["pr",["pair","zero",0],["pair",["comp","fst","succ"],1]],"snd"],""],"poly/horner":[["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]]],"snd"],["uncurry",["fold",["curry",["comp","snd",["comp","ignore",0]]],["curry",["comp",["pair",["pair",["comp","fst","fst"],["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]]],"snd"],["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],2],["comp","fst","fst"]],1]]]]]],"\n\nEvaluate a polynomial at an input coordinate using Horner's rule, given:\n\n* A target coordinate for the zero polynomial\n* An addition for coefficients\n* A multiplication for coordinates\n"],"fun/iter":[["pr",["curry",["comp","snd","id"]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",0]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]],"\n\nIterate a given arrow zero or more times.\n"],"fun/depsum":[["comp",1,["pair","id",0]],"\n\nGiven a first arrow, give the dependent sum of the second arrow over the\nfirst. The dependent sum is merely postcomposition.\n"],"fun/hom-const":[["curry",["comp","fst",0]],"\n\nTake and discard an additional argument by creating a hom.\n"],"fun/unname":[["comp",["pair","ignore","id"],["uncurry",0]],"\n\nReference an arrow by name.\n"],"fun/apppair":[["comp",["pair",0,1],["uncurry","id"]],"\n\nApply the output of one arrow onto the output of another.\n"],"fun/name":[["curry",["comp","snd",0]],"\n\nThe name of an arrow.\n"],"fun/graph":[["pair","id",0],"\n"],"fun/iter-maybe":[["pr",["curry",["comp","snd","left"]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",0]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case",["uncurry","id"],["comp","ignore","right"]]]]]]],"\n\nIterate a given arrow up to zero or more times.\n"],"fun/precomp":[["curry",["comp",["pair","fst",["comp","snd",0]],["uncurry","id"]]],"\n\nPrecompose a function type with an arrow. This is like the inverse-image\nfunctor for an arbitrary classifier. It is also like one version of the Yoneda\nembedding for the given arrow.\n"],"fun/observe":[["curry",["comp",["pair","snd","fst"],["uncurry",["comp",["pair",["comp","ignore",["curry",["comp","snd",0]]],["pr",["curry",["comp","snd","id"]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",1]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]]],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]]]],"\n\nObserve the value of an endomorphism after a specified number of iterations.\n"],"fun/flip":[["curry",["comp",["pair","snd","fst"],["uncurry",0]]],"\n\nSwap the order in which arguments are applied onto a curried arrow.\n"],"fun/postcomp":[["curry",["comp",["uncurry","id"],0]],"\n\nPostcompose a function type with an arrow. This is like one version of the\nYoneda embedding for the given arrow.\n"],"fun/const":[["comp","ignore",0],"\n"],"list/map":[["fold","nil",["comp",["pair",["comp","fst",0],"snd"],"cons"]],"\n"],"list/conspair":[["comp",["pair",0,1],"cons"],"\n\nBuild a list whose head is the output of one arrow and whose tail is the\noutput of another arrow.\n"],"list/kata":[["fold",0,1],""],"list/eq?":[["comp",["pair",["comp",["pair",["comp","fst",["fold","zero",["comp","snd","succ"]]],["comp","snd",["fold","zero",["comp","snd","succ"]]]],["uncurry",["pr",["curry",["comp","snd",["pr","t",["comp","ignore","f"]]]],["curry",["comp",["pair","fst",["comp","snd",["comp",["pr","right",["comp",["case","succ","zero"],"left"]],["case","id","zero"]]]],["uncurry","id"]]]]]],["comp",["uncurry",["fold",["curry",["comp","snd",["comp","ignore","nil"]]],["curry",["comp",["pair","fst",["comp","snd",["fold","right",["comp",["pair","fst",["comp","snd",["comp",["case","cons","nil"],"left"]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case","left",["comp","ignore","right"]]]]]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case",["comp",["pair",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["uncurry","id"]]],"cons"],["comp",["pair",["comp","fst","snd"],["comp","ignore","nil"]],["uncurry","id"]]]]]]]],["comp",["fold","nil",["comp",["pair",["comp","fst",0],"snd"],"cons"]],["fold","t","conj"]]]],"conj"],"\n\nEquality on lists is decidable, provided that equality of elements is\ndecidable.\n"],"list/para":[["comp",["fold",["pair","nil",0],["pair",["comp",["pair","fst",["comp","snd","fst"]],"cons"],1]],"snd"],""],"list/filter":[["fold","nil",["comp",["pair",["comp","fst",0],["pair","cons","snd"]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],"\n\nApply a predicate to every element of a list, and retain the elements which\nthe predicate admits.\n"],"list/scan":[["comp",["fold",["pair",0,"nil"],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",1,"snd"]],["pair","fst","cons"]]],"snd"],"\n\n\n"],"bool/ternary":[["comp",["comp",["pair","id",0],["pair","fst",["comp","snd","either"]]],["comp",["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]],["case",["comp","fst",1],["comp","fst",2]]]],""],"bool/both":[["comp",["pair",0,1],"conj"],"\n\nWhether two predicates both hold.\n"],"bool/if":[["comp","either",["case",["curry",["comp","snd",0]],["curry",["comp","snd",1]]]],"\n\nAs close as we can get to an if-expression.\n"],"bool/either":[["comp",["pair",0,1],"disj"],"\n\nWhether either predicate holds.\n"],"sdf2/extrude":[["comp",["pair",1,["comp",["comp","ignore",0],"f-negate"]],"f-add"],"\n"],"sdf2/scale":[["comp",["pair",["comp",["comp",["pair","id",["comp","ignore",["pair",0,0]]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]]]],1],["comp","ignore",0]],"f-mul"],"\n"],"sdf2/union":[["comp",["pair",0,1],["comp",["pair","f-lt","id"],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],"\n"],"sdf2/translate":[["comp",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]],1],"\n"],"sdf2/metaballs":[["comp",["pair",["comp",["pair",["comp",1,["fold",["curry",["comp","snd",["comp","ignore","f-zero"]]],["curry",["comp",["pair",["comp",["pair",["comp",["comp","fst","fst"],"snd"],["comp",["comp",["pair",["comp",["comp","fst","fst"],"fst"],"snd"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]],["comp",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp","f-sqrt",["case","id","f-zero"]]]]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]]],"f-add"]]]],"id"],["uncurry","id"]],["comp",["comp","ignore",0],"f-negate"]],"f-add"],"\n\n\n"],"mat2/vecpair":[["comp",["pair",0,1],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],["comp",["pair",["comp","fst","snd"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]]]],"\n"],"weekend/hit_sphere3?":[["comp",["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp",["comp",["pair",["comp",["comp","snd","fst"],["comp",["pair","id","id"],"f-mul"]],["comp",["comp",["pair","fst",["comp","snd","snd"]],"f-mul"],"f-negate"]],"f-add"],"f-sqrt"]],["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]]],["case",["comp",["comp",["pair",["comp",["pair",["comp",["comp","fst","snd"],"f-negate"],["comp","snd","f-negate"]],"f-add"],["comp","fst","fst"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],"left"],["comp","ignore","right"]]]],"\n\nBasically the same as hit_sphere2?, but now the quadratic formula is rewritten\nin terms of $h$, where $b = 2h$.\n"],"weekend/hit_sphere":[["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"f-mul"],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],"\n\nTest whether a ray hits a sphere, generating coefficients for the quadratic\nformula.\n"],"weekend/hit_sphere2":[["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],"\n\nTest whether a ray hits a sphere, generating coefficients for the quadratic\nformula. The coefficients are not $a$, $b$, and $c$, but $a$, $h$, and $c$,\nwhere $b = 2h$.\n"],"weekend/hit_sphere?":[["comp",["pair",["comp","ignore","f-zero"],["comp",["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"f-mul"],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],["comp",["pair",["comp",["comp","snd","fst"],["comp",["pair","id","id"],"f-mul"]],["comp",["comp",["pair",["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],["comp",["pair","fst",["comp","snd","snd"]],"f-mul"]],"f-mul"],"f-negate"]],"f-add"]]],"f-lt"],"\n\n\n"],"weekend/hit_sphere2?":[["comp",["comp",["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["comp",["pair","fst",["comp","snd","f-negate"]],"f-add"]]]]]]],"snd"],["pair",["comp","snd",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["pair",["comp",["pair",["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"f-mul"],["comp",["pair",["comp","fst",["comp",["pair","id","id"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]],["comp",["comp",["comp","ignore",1],["comp",["pair","id","id"],"f-mul"]],"f-negate"]],"f-add"]]]],["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp",["comp",["pair",["comp",["comp","snd","fst"],["comp",["pair","id","id"],"f-mul"]],["comp",["comp",["pair",["comp","ignore",["comp",["pair",["comp",["pair","f-one","f-one"],"f-add"],["comp",["pair","f-one","f-one"],"f-add"]],"f-add"]],["comp",["pair","fst",["comp","snd","snd"]],"f-mul"]],"f-mul"],"f-negate"]],"f-add"],"f-sqrt"]],["comp",["comp",["pair","snd","fst"],["uncurry",["case",["curry","left"],["curry","right"]]]],["case",["comp",["pair","snd","fst"],"left"],["comp",["pair","snd","fst"],"right"]]]],["case",["comp",["comp",["pair",["comp",["pair",["comp",["comp","fst","snd"],"f-negate"],["comp","snd","f-negate"]],"f-add"],["comp",["pair",["comp","fst","fst"],["comp","ignore",["comp",["pair","f-one","f-one"],"f-add"]]],"f-mul"]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],"left"],["comp","ignore","right"]]]],"\n\n\n"],"comonads/reader/duplicate":[["curry",["curry",["comp",["pair","snd",["comp","fst",0]],"fun/app"]]],""],"comonads/reader/counit":[["comp",["pair","id",["comp","ignore",0]],"fun/app"],""],"comonads/product/bind":[["pair","fst",0],""],"v2/dist-fun":[["comp",["comp",["comp",["pair",["comp","fst",0],["comp","snd","f-negate"]],"f-add"],["comp",["pair",["comp",["comp","f-sign","either"],["case",["curry",["comp","snd","id"]],["curry",["comp","snd","f-negate"]]]],"id"],["uncurry","id"]]],["comp",["comp","f-sqrt",["case","id","f-zero"]],["comp","f-sqrt",["case","id","f-zero"]]]],"\n"],"v2/map2":[["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],0],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],0]],"\n\n\nLift a binary operation to a vector space.\n"],"v2/scale":[["comp",["pair",["comp",["comp",["pair","id",["comp","ignore",1]],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],0],["comp","ignore",2]],"f-mul"],"\n\nScale a vector.\n"],"v2/map":[["pair",["comp","fst",0],["comp","snd",0]],"\n\nMap over both dimensions of a vector simultaneously.\n"],"v2/translate":[["comp",["pair",["comp",["comp",["pair","id",["comp",["comp","ignore",1],"f-negate"]],"f-add"],0],["comp","ignore",2]],"f-add"],"\n\nTranslate a vector.\n"],"v2/const":[["comp","ignore",["comp",0,["pair","id","id"]]],"\n\n\n"],"v3/map2":[["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],0],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],0],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],0]]]],"\n"],"v3/scale":[["comp",["pair",["pair",["comp","ignore",0],["pair",["comp","ignore",0],["comp","ignore",0]]],"id"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]]],"\n\nScale a vector by a fixed amount.\n"],"v3/broadcast":[["pair",0,["pair",0,0]],"\n"],"v3/map":[["pair",["comp","fst",0],["pair",["comp",["comp","snd","fst"],0],["comp",["comp","snd","snd"],0]]],"\n\n"],"v3/fold":[["comp",["pair","fst",["comp","snd",0]],0],"\n"],"v3/lerp":[["comp",["comp",["pair",["comp",["pair",["comp","ignore","f-one"],["comp","id","f-negate"]],"f-add"],"id"],["pair",["comp","fst",["comp",["pair","id",["comp","ignore",0]],["comp",["pair",["comp","fst",["pair","id",["pair","id","id"]]],"snd"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]]]]],["comp","snd",["comp",["pair","id",["comp","ignore",1]],["comp",["pair",["comp","fst",["pair","id",["pair","id","id"]]],"snd"],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]]]]]]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-add"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-add"]]]]],""],"v3/triple":[["pair",0,["pair",1,2]],"\n"],"f/mulpair":[["comp",["pair",0,1],"f-mul"],"\n\nApply multiplication to a pair of arrows.\n"],"f/dot3pair":[["comp",["pair",0,1],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],"\n\nApply a dot product to a pair of arrows.\n"],"f/addpair":[["comp",["pair",0,1],"f-add"],"\n\nApply addition to a pair of arrows.\n"],"f/subpair":[["comp",["pair",0,["comp",1,"f-negate"]],"f-add"],"\n\nApply subtraction to a pair of arrows.\n"],"f/divpair":[["comp",["pair",0,1],["comp",["pair","fst",["comp","snd","f-recip"]],"f-mul"]],"\n\nApply division to a pair of arrows.\n"],"f/ltpair":[["comp",["pair",0,1],"f-lt"],"\n\nWhether one arrow is less than another at an input value.\n"],"f/approx":[["comp",["comp",["comp",["pair",["comp","fst",0],["comp","snd","f-negate"]],"f-add"],["comp",["pair","id","id"],"f-mul"]],["comp",["pair","id",["comp","ignore",["comp",["comp",["comp",["pair","f-one",["comp",["comp",["pair","f-one",["comp",["pair","f-one","f-one"],"f-add"]],"f-add"],["comp",["pair","id","id"],"f-mul"]]],"f-add"],["comp",["pair","id",["comp",["pair","id","id"],"f-mul"]],"f-mul"]],"f-recip"]]],"f-lt"]],"\n\nWhether the given functor is approximately equal to the input floating-point\nvalue at the input parameter. The absolute tolerance is one millionth.\n"],"f/error":[["comp",["pair",["comp","fst",0],["comp","snd","f-negate"]],"f-add"],"\n\nThe error between the output value of the given arrow at the input value and\nthe expected input value.\n"],"f/dot2pair":[["comp",["pair",0,1],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]],"f-add"]],"\n\nApply the dot product to a pair of arrows.\n"],"f/minpair":[["comp",["pair",0,1],["comp",["pair","f-lt","id"],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]]],"\n\nThe minimum of two arrows at an input value.\n"],"monads/iter":[["pr",["curry",["comp","snd",0]],["comp",["pair","id",["comp","ignore",["curry",["comp","snd",2]]]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],1]]]],"\n\nGiven a unit and internal bind in some monad, iterate an endomorphism in that\nmonad.\n\nFor example, to iterate in the maybe monad:\n\n (monads/iter monads/maybe/unit monads/maybe/int-bind @0)\n\nIteration can terminate early in short-circuiting monads.\n"],"monads/guard":[["comp",["pair",2,"id"],["uncurry",["comp","either",["case",["curry",["comp","snd",["comp","ignore",1]]],["curry",["comp","snd",0]]]]]],"\n\nGiven the unit and zero of some monad, and some filtering predicate, test a\nvalue in that monad.\n"],"monads/int-comp":[["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],0]],"\n\nInternal composition in any monad, built from the internal bind.\n"],"monads/int-iter":[["uncurry",["pr",["curry",["comp","fst",["curry",["comp","snd",0]]]],["curry",["comp",["pair","snd",["uncurry","id"]],["curry",["comp",["pair",["comp",["pair",["comp","fst","snd"],"snd"],["uncurry","id"]],["comp","fst","fst"]],1]]]]]],"\n\nInstead of just N, we're going to have a pair N x @2\n\nThe zero case doesn't need the RHS\n\n\n(pr\n (fun/name @0)\n (comp (pair id (fun/const (fun/name @2))) (monads/int-comp @1)))\n\nGiven a unit and internal bind in some monad, iterate an endomorphism in that\nmonad.\n\nFor example, to iterate in the maybe monad:\n\n (monads/iter monads/maybe/unit monads/maybe/int-bind @0)\n\nIteration can terminate early in short-circuiting monads.\n\n"],"monads/int-lift":[["curry",["comp",["uncurry","id"],0]],"\n\nLift an internal hom to a monad, given the unit of the monad.\n"],"monads/maybe/guard":[["comp",["pair",0,["pair","left",["comp","ignore","right"]]],["comp",["pair",["comp","fst",["comp","either",["case",["curry",["comp","snd","fst"]],["curry",["comp","snd","snd"]]]]],"snd"],["uncurry","id"]]],"\n\nDo nothing if a value passes a filter, otherwise fail.\n"],"monads/maybe/bind":[["comp",0,["case",1,"right"]],"\n\nBind for the maybe monad.\n"],"monads/maybe/lift":[["comp",0,"left"],"\n\nLift an arrow to the Kleisli category of the maybe monad.\n"],"monads/cost/map":[["pair",["comp","fst",0],"snd"],"\n"],"monads/cost/comp":[["comp",["comp",0,["pair",["comp","fst",1],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],"\n\n"],"monads/cost/lift":[["pair",0,["comp","ignore",["comp","zero","succ"]]],"\n"],"monads/writer/unit":[["pair","id",["comp","ignore",0]],""],"monads/writer/join":[["pair",["comp","fst","fst"],["comp",["pair",["comp","fst","snd"],"snd"],0]],""],"monads/writer/map":[["pair",["comp","fst",0],"snd"],""],"monads/subset/unit":[["curry",0],""],"monads/cont/lift":[["curry",["comp",["pair","snd",["comp","fst",0]],["uncurry","id"]]],"\n"],"bits/repeat-endo":[["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold",["curry",["comp","snd","id"]],["comp",["pair","fst",["comp","snd",["comp",["pair","id","id"],["curry",["comp",["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry","id"]]]],["uncurry","id"]]]]]],["uncurry",["comp","either",["case",["curry",["comp","snd",["curry",["comp",["uncurry","id"],0]]]],["curry",["comp","snd","id"]]]]]]]],"\n\nRepeatedly apply an endomorphism.\n"],"bits/exp-sqr":[["comp",["comp",["pair","id",["comp","ignore","nil"]],["uncurry",["fold",["curry",["comp","snd","id"]],["curry",["comp",["pair",["comp","fst","snd"],["comp",["pair",["comp","fst","fst"],"snd"],"cons"]],["uncurry","id"]]]]]],["fold",0,["comp",["pair","fst",["comp","snd",2]],["uncurry",["comp","either",["case",["curry",["comp","snd",1]],["curry",["comp","snd","id"]]]]]]]],"\n\nGiven a zero, an increment, and a doubling operation, [exponentiate by\nsquaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring).\n"],"cats/cost/curry":[["pair",["curry",["comp",0,"fst"]],["comp","ignore","zero"]],"\n\nWrong, but close enough for now.\n"],"cats/cost/uncurry":[["comp",["pair",["comp","fst",0],"snd"],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["uncurry","id"]],["comp","fst","snd"]]],"\n"],"cats/cost/pr":[["pr",0,["comp",["pair",["comp","fst",1],"snd"],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]]],"\n"],"cats/cost/comp":[["comp",["comp",0,["pair",["comp","fst",1],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]],"\n"],"cats/cost/fold":[["fold",0,["comp",["comp",["pair",["pair","fst",["comp","snd","fst"]],["comp","snd","snd"]],["pair",["comp","fst",1],"snd"]],["comp",["pair",["comp","fst","fst"],["pair",["comp","fst","snd"],"snd"]],["pair","fst",["comp","snd",["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]]]],"\n"],"cats/cost/case":[["case",0,1],"\n"],"cats/cost/lift":[["pair",0,["comp","ignore",["comp","zero","succ"]]],"\n"],"cats/cost/pair":[["comp",["pair",0,1],["pair",["pair",["comp","fst","fst"],["comp","snd","fst"]],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["uncurry",["pr",["curry",["comp","snd","id"]],["curry",["comp",["uncurry","id"],"succ"]]]]]]],"\n"],"pair/tensor":[["pair",["comp","fst",0],["comp","snd",1]],"\n\nCompose two arrows in parallel, acting on pairs of values.\n\nIn categorical jargon, the [tensor\nproduct](https://ncatlab.org/nlab/show/tensor+product) is a functor from pairs\nof arrows to arrows:\n\n$$\n\\bigotimes : C \\times C \\to C\n$$\n"],"pair/mapfst":[["pair",["comp","fst",0],"snd"],"\n\nMap over the first component of a pair.\n"],"pair/mapsnd":[["pair","fst",["comp","snd",0]],"\n\nMap over the second component of a pair.\n"],"pair/bimap":[["pair",["comp","fst",0],["comp","snd",0]],"\n\nMap uniformly over both components of a pair.\n"],"pair/of":[["comp",["pair",1,2],0],"\n\nCall an arrow of two arguments by building both arguments from a single input.\n"],"yoneda/embed":[["curry",["comp",["uncurry","id"],0]],"\n\nThe Yoneda embedding of an arrow.\n"],"yoneda/lift":[["comp",["pair","ignore","id"],["uncurry",["comp",["comp","ignore",["curry",["comp","snd","id"]]],0]]],"\n\nUndo the Yoneda embedding.\n"],"sum/mapright":[["case","left",["comp",0,"right"]],"\n\nMap over the right-hand case of a sum.\n\n"],"sum/mapleft":[["case",["comp",0,"left"],"right"],"\n\nMap over the left-hand case of a sum.\n"],"sum/par":[["case",["comp",0,"left"],["comp",1,"right"]],""],"mat3/vecpair":[["comp",["pair",0,1],["pair",["comp",["pair",["comp","fst","fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],["pair",["comp",["pair",["comp",["comp","fst","snd"],"fst"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]],["comp",["pair",["comp",["comp","fst","snd"],"snd"],"snd"],["comp",["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],["pair",["comp",["pair",["comp","fst","fst"],["comp","snd","fst"]],"f-mul"],["comp",["pair",["comp","fst","snd"],["comp","snd","snd"]],"f-mul"]]]],["comp",["pair","fst",["comp","snd","f-add"]],"f-add"]]]]]],"\n"]}}
\ No newline at end of file
--- a/movelist/cammy-repl.scm
+++ b/movelist/cammy-repl.scm
@@ -136,8 +136,8 @@
136136
137137 (define format-ty
138138 (match-lambda
139- [`(pair ,x ,y) (string-append (format-ty x) " × " (format-ty y))]
140- [`(sum ,x ,y) (string-append (format-ty x) " + " (format-ty y))]
139+ [`(pair ,x ,y) (string-append "(" (format-ty x) " × " (format-ty y) ")")]
140+ [`(sum ,x ,y) (string-append "(" (format-ty x) " + " (format-ty y) ")")]
141141 [`(hom ,x ,y) (string-append "[" (format-ty x) ", " (format-ty y) "]")]
142142 [`(list ,x) (string-append "[" (format-ty x) "]")]
143143 [`(tree ,x) (string-append "Tree(" (format-ty x) ")")]
@@ -145,6 +145,21 @@
145145 ; XXX WTF?
146146 [(? number? n) (number->string n)]))
147147
148+(define (describe-ty° s t ps)
149+ (conde
150+ ((== s '1) (== ps `("element of" ,t)))
151+ ((== s '2) (== ps `("pair of" ,t)))
152+ ((== s 'N) (== ps `("sequence of" ,t)))
153+ ((== t '2) (== ps `("predicate/subset of" ,s)))))
154+
155+(define str-or-ty
156+ (match-lambda [(? string? s) s] [ty (format-ty ty)]))
157+
158+(define (describe-ty s t)
159+ (map
160+ (lambda (ps) (string-intersperse (map str-or-ty ps) " "))
161+ (run 3 (q) (describe-ty° s t q))))
162+
148163 (define (format-type-arrow st)
149164 (string-append (format-ty (car st)) " → " (format-ty (cdr st))))
150165
@@ -159,6 +174,13 @@
159174 (string-intersperse (map format-type-arrow ctx) ", ")
160175 ")")))]))
161176
177+(define format-type-description
178+ (match-lambda
179+ [`(ty ,s ,t ,_)
180+ (string-append "Interpretations: "
181+ (string-intersperse (describe-ty s t) ", ")
182+ "…")]))
183+
162184 (define build-holes
163185 (match-lambda
164186 [(? number? n) (build-num n)]
@@ -187,6 +209,7 @@
187209 ; (display fancy-expr)
188210 (display expr)
189211 (display (format-type-judgement ty)) (newline)
212+ (display (format-type-description ty)) (newline)
190213 (set! most-recent-expr expr)
191214 (cammy-eval-timed expr ty))))
192215
--- a/todo.txt
+++ b/todo.txt
@@ -75,19 +75,6 @@
7575 * 8 -> 2 is the type of octets
7676 * 1024 × 768 -> F is like a type of greyscale pixel buffers
7777 * Note the obvious issue: which sizes are efficient on hardware?
78- * The case for trees
79- * data Tree a = Leaf | Branch a (Tree a) (Tree a)
80- * well-founded whenever lists are well-founded
81- * Can be used to implement several nice collections
82- * Classic binary search trees
83- * Okasaki-style red-black trees?
84- * Skew heaps for priority queues https://themonadreader.files.wordpress.com/2010/05/issue16.pdf
85- * Efficient maps keyed by N
86- * Attempted to implement them, but ran into a problem: tree traversals on
87- CAM are not obvious
88- * Defunctionalization might work: can the tree traversal be linearized?
89- * Can be linearized on a second stack...
90- * Figured it out; the trick is to use GOTO, CALL, and RET
9178 * Deferreds
9279 * Monad API
9380 * Given x : 1 -> X, (seed x) : 1 -> DX
@@ -96,6 +83,8 @@
9683 * With trampoline monad, all of this should be possible
9784 * Ways of interpreting existing types
9885 * Building maths from N
86+ * Ints
87+ * int/sub
9988 * Rational numbers Q
10089 * Using binary quote notation?
10190 * Continued fractions?
@@ -117,6 +106,25 @@
117106 * Taxicab
118107 * Maximum
119108 * Lp
109+ * Efficient difference lists
110+ * Core type: [X] -> [X]
111+ * Given a list of X, prepend a prefix
112+ * The case for trees
113+ * Classic binary search trees
114+ * Okasaki-style red-black trees?
115+ * Skew heaps for priority queues https://themonadreader.files.wordpress.com/2010/05/issue16.pdf
116+ * Efficient maps keyed by N
117+ * Universal approach to abstraction
118+ * https://www.cs.tufts.edu/~nr/cs257/archive/john-hughes/lists.pdf
119+ * To represent type T with representing type R, need:
120+ * abs : R -> T
121+ * rep : T -> R
122+ * (comp rep abs) = id : T -> T
123+ * For any arrow f : T -> T, it is implemented by g : R -> R when:
124+ * (comp abs f) = (comp g abs)
125+ * Examples
126+ * [2] represents N
127+ * [[X,X],[X,X]] is equivalent to N
120128 * CPS for particular monads, using codensity
121129 * maybe monad: X -> (X -> R) -> R -> R
122130 * list monad: X -> (X -> R -> R) -> R -> R
@@ -198,8 +206,6 @@
198206 * All of the pieces should be available
199207 * Non-empty lists form a comonad
200208 * Moore machines form a comonad?
201- * Ints
202- * int/sub
203209 * Run-length encoding
204210 * encoder : [2] -> [N]
205211 * could be generalized to any equality