packages feed

purescript 0.14.9 → 0.15.0

raw patch · 326 files changed

+19061/−7827 lines, 326 filesdep +monoidal-containersdep −purescript-cstdep −waidep −wai-websockets

Dependencies added: monoidal-containers

Dependencies removed: purescript-cst, wai, wai-websockets, warp, websockets

Files

CONTRIBUTING.md view
@@ -41,6 +41,8 @@  This will run whatever test uses the example file `1110.purs`. +The golden files (e.g. `*.out` files) are generated automatically when missing, and can be updated by setting the "HSPEC_ACCEPT" environment variable, e.g. by running `HSPEC_ACCEPT=true stack test`.+ ### Adding Dependencies  Because the PureScript compiler is distributed in binary form, we include the licenses of all dependencies, including transitive ones, in the LICENSE file. Therefore, whenever the dependencies change, the LICENSE file should be updated.
CONTRIBUTORS.md view
@@ -152,6 +152,9 @@ | [@xgrommx](https://github.com/xgrommx) | Denis Stoyanov | [MIT license](http://opensource.org/licenses/MIT) | | [@MonoidMusician](https://github.com/MonoidMusician) | Verity Scheel | [MIT license](http://opensource.org/licenses/MIT) | | [@thomashoneyman](https://github.com/thomashoneyman) | Thomas Honeyman | [MIT license](http://opensource.org/licenses/MIT) |+| [@sigma-andex](https://github.com/sigma-andex) | Jan Schulte | [MIT license](http://opensource.org/licenses/MIT) |+| [@i-am-the-slime](https://github.com/i-am-the-slime) | Mark Eibes | [MIT license](http://opensource.org/licenses/MIT) |+| [@sd-yip](https://github.com/sd-yip) | Nicholas Yip | [MIT license](http://opensource.org/licenses/MIT) |  ### Contributors using Modified Terms 
INSTALL.md view
@@ -24,6 +24,7 @@ * NPM: `npm install -g purescript` * Homebrew (for macOS): `brew install purescript` * FreeBSD binary packages: `pkg install hs-purescript`+* GNU Guix: `guix install purescript`  ## Compiling from source 
LICENSE view
@@ -16,5876 +16,5210 @@    Cabal   Glob-  HUnit-  SHA-  StateVar-  aeson-  aeson-better-errors-  aeson-pretty-  alex-  ansi-terminal-  ansi-wl-pprint-  appar-  array-  asn1-encoding-  asn1-parse-  asn1-types-  assoc-  async-  attoparsec-  auto-update-  base-  base-compat-  base-compat-batteries-  base-orphans-  base64-bytestring-  basement-  bifunctors-  binary-  blaze-builder-  blaze-html-  blaze-markup-  bower-json-  boxes-  bsb-http-chunked-  byteorder-  bytestring-  bytestring-builder-  cabal-doctest-  call-stack-  case-insensitive-  cborg-  cheapskate-  clock-  colour-  comonad-  conduit-  conduit-extra-  constraints-  containers-  contravariant-  cookie-  cryptonite-  css-text-  data-default-  data-default-class-  data-default-instances-containers-  data-default-instances-dlist-  data-default-instances-old-locale-  data-fix-  data-ordlist-  deepseq-  directory-  distributive-  dlist-  easy-file-  edit-distance-  enclosed-exceptions-  entropy-  exceptions-  fast-logger-  file-embed-  filepath-  fsnotify-  ghc-prim-  half-  happy-  hashable-  haskeline-  hinotify-  hourglass-  http-date-  http-types-  http2-  indexed-traversable-  integer-gmp-  integer-logarithms-  iproute-  language-javascript-  lifted-async-  lifted-base-  memory-  microlens-  microlens-ghc-  microlens-mtl-  microlens-platform-  microlens-th-  mime-types-  monad-control-  monad-logger-  monad-loops-  mono-traversable-  mtl-  mtl-compat-  network-  network-byte-order-  network-uri-  old-locale-  old-time-  optparse-applicative-  parallel-  parsec-  pattern-arrows-  pem-  pretty-  primitive-  process-  protolude-  psqueues-  purescript-cst-  random-  regex-base-  regex-tdfa-  resourcet-  safe-  scientific-  semialign-  semigroupoids-  semigroups-  serialise-  shelly-  simple-sendfile-  sourcemap-  split-  splitmix-  stm-  stm-chans-  streaming-commons-  strict-  stringsearch-  syb-  tagged-  tagsoup-  template-haskell-  text-  th-abstraction-  th-compat-  these-  time-  time-compat-  time-manager-  transformers-  transformers-base-  transformers-compat-  type-equality-  typed-process-  uniplate-  unix-  unix-compat-  unix-time-  unliftio-  unliftio-core-  unordered-containers-  utf8-string-  uuid-types-  vault-  vector-  vector-algorithms-  void-  wai-  wai-app-static-  wai-extra-  wai-logger-  wai-websockets-  warp-  websockets-  word8-  x509-  xss-sanitize-  zlib--Cabal LICENSE file:--  Copyright (c) 2003-2017, Cabal Development Team.-  See the AUTHORS file for the full list of copyright holders.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Isaac Jones nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--Glob LICENSE file:--  The code in Glob is released under the license below. Copyrights to parts of-  the code are held by whoever wrote the code in question: see CREDITS.txt for a-  list of authors.--  Copyright (c) 2008-2018 <authors>-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:-      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright-        notice, this list of conditions and the following disclaimer in the-        documentation and/or other materials provided with the distribution.-      * Neither the name of the project nor the names of its contributors may be-        used to endorse or promote products derived from this software without-        specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO-  EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR-  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE-  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF-  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--HUnit LICENSE file:--  HUnit is Copyright (c) Dean Herington, 2002, all rights reserved,-  and is distributed as free software under the following license.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  - Redistributions of source code must retain the above copyright-  notice, this list of conditions, and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright-  notice, this list of conditions, and the following disclaimer in the-  documentation and/or other materials provided with the distribution.--  - The names of the copyright holders may not be used to endorse or-  promote products derived from this software without specific prior-  written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR-  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,-  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE-  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN-  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--SHA LICENSE file:--  Copyright (c) 2008, Galois, Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the Galois, Inc. nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--StateVar LICENSE file:--  Copyright (c) 2014-2015, Edward Kmett-  Copyright (c) 2009-2021, Sven Panne-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  1. Redistributions of source code must retain the above copyright notice,-     this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of its contributors may be-     used to endorse or promote products derived from this software without-     specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--aeson LICENSE file:--  Copyright (c) 2011, MailRank, Inc. 2014-2021 Aeson project contributors--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--aeson-better-errors LICENSE file:--  Copyright (c) 2015 Harry Garrood--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be included-  in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--aeson-pretty LICENSE file:--  Copyright (c)2011, Falko Peters--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Falko Peters nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--alex LICENSE file:--  Copyright (c) 1995-2011, Chris Dornan and Simon Marlow-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of the copyright holders, nor the names of the-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--ansi-terminal LICENSE file:--  Copyright (c) 2008, Maximilian Bolingbroke-  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted-  provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright notice, this list of-        conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright notice, this list of-        conditions and the following disclaimer in the documentation and/or other materials-        provided with the distribution.-      * Neither the name of Maximilian Bolingbroke nor the names of other contributors may be used to-        endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR-  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER-  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT-  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--ansi-wl-pprint LICENSE file:--  Copyright 2008, Daan Leijen and Max Bolingbroke. All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.--    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.--  This software is provided by the copyright holders "as is" and any-  express or implied warranties, including, but not limited to, the-  implied warranties of merchantability and fitness for a particular-  purpose are disclaimed. In no event shall the copyright holders be-  liable for any direct, indirect, incidental, special, exemplary, or-  consequential damages (including, but not limited to, procurement of-  substitute goods or services; loss of use, data, or profits; or-  business interruption) however caused and on any theory of liability,-  whether in contract, strict liability, or tort (including negligence-  or otherwise) arising in any way out of the use of this software, even-  if advised of the possibility of such damage.--appar LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--array LICENSE file:--  This library (libraries/base) is derived from code from several-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--    * Code from the Haskell Foreign Function Interface specification,-      which is (c) Manuel M. T. Chakravarty and freely redistributable-      (but see the full license for restrictions).--  The full text of these licenses is reproduced below.  All of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------  Code derived from the document "The Haskell 98 Foreign Function-  Interface, An Addendum to the Haskell 98 Report" is distributed under-  the following license:--    Copyright (c) 2002 Manuel M. T. Chakravarty--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Foreign Function Interface.--  --------------------------------------------------------------------------------asn1-encoding LICENSE file:--  Copyright (c) 2010-2013 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--asn1-parse LICENSE file:--  Copyright (c) 2010-2013 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--asn1-types LICENSE file:--  Copyright (c) 2010-2013 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--assoc LICENSE file:--  Copyright (c) 2017, Oleg Grenrus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Oleg Grenrus nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--async LICENSE file:--  Copyright (c) 2012, Simon Marlow--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Simon Marlow nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--attoparsec LICENSE file:--  Copyright (c) Lennart Kolmodin--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--auto-update LICENSE file:--  Copyright (c) 2014 Michael Snoyman--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be included-  in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--base LICENSE file:--  This library (libraries/base) is derived from code from several-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--    * Code from the Haskell Foreign Function Interface specification,-      which is (c) Manuel M. T. Chakravarty and freely redistributable-      (but see the full license for restrictions).--  The full text of these licenses is reproduced below.  All of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------  Code derived from the document "The Haskell 98 Foreign Function-  Interface, An Addendum to the Haskell 98 Report" is distributed under-  the following license:--    Copyright (c) 2002 Manuel M. T. Chakravarty--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Foreign Function Interface.--  -------------------------------------------------------------------------------base-compat LICENSE file:--  Copyright (c) 2012-2018 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com>--  Permission is hereby granted, free of charge, to any person obtaining a copy-  of this software and associated documentation files (the "Software"), to deal-  in the Software without restriction, including without limitation the rights-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell-  copies of the Software, and to permit persons to whom the Software is-  furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in-  all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN-  THE SOFTWARE.--base-compat-batteries LICENSE file:--  Copyright (c) 2012-2018 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com>--  Permission is hereby granted, free of charge, to any person obtaining a copy-  of this software and associated documentation files (the "Software"), to deal-  in the Software without restriction, including without limitation the rights-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell-  copies of the Software, and to permit persons to whom the Software is-  furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in-  all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN-  THE SOFTWARE.--base-orphans LICENSE file:--  Copyright (c) 2015-2017 Simon Hengel <sol@typeful.net>, João Cristóvão <jmacristovao@gmail.com>, Ryan Scott <ryan.gl.scott@gmail.com>--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be included-  in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--base64-bytestring LICENSE file:--  Copyright (c) 2010 Bryan O'Sullivan <bos@serpentine.com>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--basement LICENSE file:--  Copyright (c) 2015-2017 Vincent Hanquez <vincent@snarc.org>-  Copyright (c) 2017-2019 Foundation Maintainers--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--bifunctors LICENSE file:--  Copyright 2008-2016 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--binary LICENSE file:--  Copyright (c) Lennart Kolmodin--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--blaze-builder LICENSE file:--  Copyright Jasper Van der Jeugt 2010, Simon Meier 2010 & 2011--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Jasper Van der Jeugt nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--blaze-html LICENSE file:--  Copyright Jasper Van der Jeugt 2010--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Jasper Van der Jeugt nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--blaze-markup LICENSE file:--  Copyright Jasper Van der Jeugt 2010--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Jasper Van der Jeugt nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--bower-json LICENSE file:--  Copyright (c) 2015 Harry Garrood--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be included-  in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--boxes LICENSE file:--  Copyright (c) Brent Yorgey 2008--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of other contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  All other rights are reserved.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--bsb-http-chunked LICENSE file:--  Copyright Jasper Van der Jeugt 2010, Simon Meier 2010 & 2011--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Jasper Van der Jeugt nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--byteorder LICENSE file:--  Copyright 2009, Antoine Latter--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of the author nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--bytestring LICENSE file:--  Copyright (c) Don Stewart 2005-2009-            (c) Duncan Coutts 2006-2015-            (c) David Roundy 2003-2005-            (c) Simon Meier 2010-2011--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--bytestring-builder LICENSE file:--  Copyright Jasper Van der Jeugt 2010, Simon Meier 2010-2013--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Jasper Van der Jeugt nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--cabal-doctest LICENSE file:--  Copyright (c) 2017, Oleg Grenrus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Oleg Grenrus nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--call-stack LICENSE file:--  Copyright (c) 2016-2021 Simon Hengel <sol@typeful.net>--  Permission is hereby granted, free of charge, to any person obtaining a copy-  of this software and associated documentation files (the "Software"), to deal-  in the Software without restriction, including without limitation the rights-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell-  copies of the Software, and to permit persons to whom the Software is-  furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in-  all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN-  THE SOFTWARE.--case-insensitive LICENSE file:--  Copyright (c) 2011-2013 Bas van Dijk--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * The name of Bas van Dijk and the names of contributors may NOT-        be used to endorse or promote products derived from this-        software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--cborg LICENSE file:--  Copyright (c) 2015-2017 Duncan Coutts,-                2015-2017 Well-Typed LLP,-                2015 IRIS Connect Ltd.--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Duncan Coutts nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--cheapskate LICENSE file:--  Copyright (c) 2013, John MacFarlane--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of John MacFarlane nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--clock LICENSE file:--  Copyright (c) 2009-2012, Cetin Sert-  Copyright (c) 2010, Eugene Kirpichov--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * The names of contributors may not be used to endorse or promote-        products derived from this software without specific prior-        written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--colour LICENSE file:--  Copyright (c) 2008, 2009-  Russell O'Connor--  Permission is hereby granted, free of charge, to any person obtaining a copy-  of this software and associated documentation files (the "Software"), to deal-  in the Software without restriction, including without limitation the rights-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell-  copies of the Software, and to permit persons to whom the Software is-  furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in-  all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN-  THE SOFTWARE.--comonad LICENSE file:--  Copyright 2008-2014 Edward Kmett-  Copyright 2004-2008 Dave Menendez--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--conduit LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--conduit-extra LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--constraints LICENSE file:--  Copyright 2011-2015 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--containers LICENSE file:--  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--contravariant LICENSE file:--  Copyright 2007-2015 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--cookie LICENSE file:--  Copyright (c) 2010 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--cryptonite LICENSE file:--  Copyright (c) 2006-2015 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--css-text LICENSE file:--  Copyright (c) 2010 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--data-default LICENSE file:--  Copyright (c) 2013 Lukas Mai--  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification,-  are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.-  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.-  * Neither the name of the author nor the names of his contributors-    may be used to endorse or promote products derived from this software-    without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,-  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--data-default-class LICENSE file:--  Copyright (c) 2013 Lukas Mai--  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification,-  are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.-  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.-  * Neither the name of the author nor the names of his contributors-    may be used to endorse or promote products derived from this software-    without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,-  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--data-default-instances-containers LICENSE file:--  Copyright (c) 2013 Lukas Mai--  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification,-  are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.-  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.-  * Neither the name of the author nor the names of his contributors-    may be used to endorse or promote products derived from this software-    without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY LUKAS MAI AND CONTRIBUTORS "AS IS" AND ANY-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON-  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--data-default-instances-dlist LICENSE file:--  Copyright (c) 2013 Lukas Mai--  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification,-  are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.-  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.-  * Neither the name of the author nor the names of his contributors-    may be used to endorse or promote products derived from this software-    without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY LUKAS MAI AND CONTRIBUTORS "AS IS" AND ANY-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON-  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--data-default-instances-old-locale LICENSE file:--  Copyright (c) 2013 Lukas Mai--  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification,-  are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.-  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.-  * Neither the name of the author nor the names of his contributors-    may be used to endorse or promote products derived from this software-    without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY LUKAS MAI AND CONTRIBUTORS "AS IS" AND ANY-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON-  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--data-fix LICENSE file:--  Copyright Anton Kholomiov 2010--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Anton Kholomiov nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--data-ordlist LICENSE file:--  Copyright (c) 2009-2010, Melding Monads-  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.-      * Neither the name of Melding Monads nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--deepseq LICENSE file:--  This library (deepseq) is derived from code from the GHC project which-  is largely (c) The University of Glasgow, and distributable under a-  BSD-style license (see below).--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2001-2009, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------directory LICENSE file:--  This library (libraries/base) is derived from code from two-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--  The full text of these licenses is reproduced below.  Both of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------distributive LICENSE file:--  Copyright 2011-2016 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--dlist LICENSE file:--  Copyright © 2006-2009 Don Stewart, 2013-2020 Sean Leather, contributors--  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification,-  are permitted provided that the following conditions are met:--  1. Redistributions of source code must retain the above copyright notice, this-     list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright notice,-     this list of conditions and the following disclaimer in the documentation-     and/or other materials provided with the distribution.--  3. Neither the name of the copyright holders nor the names of other contributors-     may be used to endorse or promote products derived from this software without-     specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF-  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--easy-file LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--edit-distance LICENSE file:--  Copyright (c) 2008-2013 Maximilian Bolingbroke-  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted-  provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright notice, this list of-        conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright notice, this list of-        conditions and the following disclaimer in the documentation and/or other materials-        provided with the distribution.-      * Neither the name of Maximilian Bolingbroke nor the names of other contributors may be used to-        endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR-  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER-  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT-  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--enclosed-exceptions LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--entropy LICENSE file:--  Copyright (c) Thomas DuBuisson--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--exceptions LICENSE file:--  Copyright 2013-2015 Edward Kmett-  Copyright 2012 Google Inc.--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--fast-logger LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--file-embed LICENSE file:--  The following license covers this documentation, and the source code, except-  where otherwise indicated.--  Copyright 2008, Michael Snoyman. All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.--  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO-  EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,-  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE-  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF-  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--filepath LICENSE file:--  Copyright Neil Mitchell 2005-2018.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Neil Mitchell nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--fsnotify LICENSE file:--  Copyright (c) 2012, Mark Dittmer--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Mark Dittmer nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--ghc-prim LICENSE file:--  This library (libraries/ghc-prim) is derived from code from several-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--  The full text of these licenses is reproduced below.  All of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.---half LICENSE file:--  Copyright 2014 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--happy LICENSE file:--  The Happy License-  -------------------  Copyright 2001, Simon Marlow and Andy Gill.  All rights reserved.--  Extensions to implement Tomita's Generalized LR parsing:-    Copyright 2004, University of Durham, Paul Callaghan and Ben Medlock.-    All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR-  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,-  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE-  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN-  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--hashable LICENSE file:--  Copyright Milan Straka 2010--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Milan Straka nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--haskeline LICENSE file:--  Copyright 2007 Judah Jacobson--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  1. Redistributions of source code must retain the above copyright notice, this-  list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  3. Neither the name of the copyright holder nor the names of its contributors-  may be used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,-  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--hinotify LICENSE file:--  Copyright (c) Lennart Kolmodin--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--hourglass LICENSE file:--  Copyright (c) 2014 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--http-date LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--http-types LICENSE file:--  Copyright (c) 2011, Aristid Breitkreuz-  Copyright (c) 2011, Michael Snoyman--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Aristid Breitkreuz nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--http2 LICENSE file:--  Copyright (c) 2013, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--indexed-traversable LICENSE file:--  Copyright 2012-2016 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--integer-gmp LICENSE file:--  Copyright (c) 2014, Herbert Valerio Riedel--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Herbert Valerio Riedel nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--integer-logarithms LICENSE file:--  Copyright (c) 2011 Daniel Fischer, 2017 Oleg Grenrus--  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and-   associated documentation files (the "Software"), to deal in the Software without restriction,-   including without limitation the rights to use, copy, modify, merge, publish, distribute,-   sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is-   furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in all copies or-  substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT-  LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN-   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--iproute LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--language-javascript LICENSE file:--  Copyright (c)2010, Alan Zimmerman--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Alan Zimmerman nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--lifted-async LICENSE file:--  Copyright (c) 2012-2017, Mitsutoshi Aoe--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Mitsutoshi Aoe nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--lifted-base LICENSE file:--  Copyright © 2010-2012, Bas van Dijk, Anders Kaseorg-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--  • Redistributions of source code must retain the above copyright-    notice, this list of conditions and the following disclaimer.--  • Redistributions in binary form must reproduce the above copyright-    notice, this list of conditions and the following disclaimer in the-    documentation and/or other materials provided with the distribution.--  • Neither the name of the author nor the names of other contributors-    may be used to endorse or promote products derived from this-    software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT-  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--memory LICENSE file:--  Copyright (c) 2015-2018 Vincent Hanquez <vincent@snarc.org>-  Copyright (c) 2017-2018 Nicolas Di Prima <nicolas@primetype.co.uk>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--microlens LICENSE file:--  Copyright (c) 2013-2016 Edward Kmett,-                2015-2016 Artyom Kazak,-                2018 Monadfix--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Monadfix nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--microlens-ghc LICENSE file:--  Copyright (c) 2013-2016 Edward Kmett,-                2015-2016 Artyom Kazak,-                2018 Monadfix--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Monadfix nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--microlens-mtl LICENSE file:--  Copyright (c) 2013-2016 Edward Kmett,-                2015-2016 Artyom Kazak,-                2018 Monadfix--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Monadfix nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--microlens-platform LICENSE file:--  Copyright (c) 2012-2016 Edward Kmett,-                2015-2016 Artyom Kazak,-                2018 Monadfix--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Monadfix nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--microlens-th LICENSE file:--  Copyright (c) 2013-2016 Eric Mertens, Edward Kmett, Artyom Kazak-                2018 Monadfix--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Monadfix nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--mime-types LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--monad-control LICENSE file:--  Copyright © 2010, Bas van Dijk, Anders Kaseorg-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--  • Redistributions of source code must retain the above copyright-    notice, this list of conditions and the following disclaimer.--  • Redistributions in binary form must reproduce the above copyright-    notice, this list of conditions and the following disclaimer in the-    documentation and/or other materials provided with the distribution.--  • Neither the name of the author nor the names of other contributors-    may be used to endorse or promote products derived from this-    software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT-  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--monad-logger LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--mono-traversable LICENSE file:--  Copyright (c) 2013 Michael Snoyman, http://www.fpcomplete.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--mtl LICENSE file:--  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--mtl-compat LICENSE file:--  Copyright (c) 2015-2017, Ryan Scott--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Ryan Scott nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--network LICENSE file:--  Copyright (c) 2002-2010, The University Court of the University of Glasgow.-  Copyright (c) 2007-2010, Johan Tibell--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--network-byte-order LICENSE file:--  Copyright (c) 2017, Kazu Yamamoto--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Kazu Yamamoto nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--network-uri LICENSE file:--  Copyright (c) 2002-2010, The University Court of the University of Glasgow.-  Copyright (c) 2007-2010, Johan Tibell--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--old-locale LICENSE file:--  This library (libraries/base) is derived from code from two-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--  The full text of these licenses is reproduced below.  Both of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------old-time LICENSE file:--  This library (libraries/base) is derived from code from two-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--  The full text of these licenses is reproduced below.  Both of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------optparse-applicative LICENSE file:--  Copyright (c) 2012, Paolo Capriotti--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Paolo Capriotti nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--parallel LICENSE file:--  This library (libraries/parallel) is derived from code from-  the GHC project which is largely (c) The University of-  Glasgow, and distributable under a BSD-style license (see below).--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------parsec LICENSE file:--  Copyright 1999-2000, Daan Leijen; 2007, Paolo Martini. All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  * Redistributions of source code must retain the above copyright notice,-    this list of conditions and the following disclaimer.-  * Redistributions in binary form must reproduce the above copyright-    notice, this list of conditions and the following disclaimer in the-    documentation and/or other materials provided with the distribution.--  This software is provided by the copyright holders "as is" and any express or-  implied warranties, including, but not limited to, the implied warranties of-  merchantability and fitness for a particular purpose are disclaimed. In no-  event shall the copyright holders be liable for any direct, indirect,-  incidental, special, exemplary, or consequential damages (including, but not-  limited to, procurement of substitute goods or services; loss of use, data,-  or profits; or business interruption) however caused and on any theory of-  liability, whether in contract, strict liability, or tort (including-  negligence or otherwise) arising in any way out of the use of this software,-  even if advised of the possibility of such damage.--pattern-arrows LICENSE file:--  The MIT License (MIT)--  Copyright (c) 2013 Phil Freeman--  Permission is hereby granted, free of charge, to any person obtaining a copy of-  this software and associated documentation files (the "Software"), to deal in-  the Software without restriction, including without limitation the rights to-  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of-  the Software, and to permit persons to whom the Software is furnished to do so,-  subject to the following conditions:--  The above copyright notice and this permission notice shall be included in all-  copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS-  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR-  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER-  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--pem LICENSE file:--  Copyright (c) 2010-2018 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--pretty LICENSE file:--  This library (libraries/pretty) is derived from code from-  the GHC project which is largely (c) The University of-  Glasgow, and distributable under a BSD-style license (see below).--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------primitive LICENSE file:--  Copyright (c) 2008-2009, Roman Leshchinskiy-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.---process LICENSE file:--  This library (libraries/process) is derived from code from two-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--  The full text of these licenses is reproduced below.  Both of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------protolude LICENSE file:--  Copyright (c) 2016-2020, Stephen Diehl--  Permission is hereby granted, free of charge, to any person obtaining a copy-  of this software and associated documentation files (the "Software"), to-  deal in the Software without restriction, including without limitation the-  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or-  sell copies of the Software, and to permit persons to whom the Software is-  furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in-  all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING-  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS-  IN THE SOFTWARE.--psqueues LICENSE file:--  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--purescript-cst LICENSE file:--  Copyright (c) 2013-17 Phil Freeman, (c) 2014-2017 Gary Burgess, and other-  contributors-  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:--  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.--  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--random LICENSE file:--  This library (libraries/base) is derived from code from two-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--  The full text of these licenses is reproduced below.  Both of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------regex-base LICENSE file:--  This modile is under this "3 clause" BSD license:--  Copyright (c) 2007, Christopher Kuklewicz-  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.-      * The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--regex-tdfa LICENSE file:--  This modile is under this "3 clause" BSD license:--  Copyright (c) 2007-2009, Christopher Kuklewicz-  All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.-      * The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--resourcet LICENSE file:--  Copyright (c)2011, Michael Snoyman--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Michael Snoyman nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--safe LICENSE file:--  Copyright Neil Mitchell 2007-2020.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Neil Mitchell nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--scientific LICENSE file:--  Copyright (c) 2013, Bas van Dijk--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Bas van Dijk nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--semialign LICENSE file:--  Copyright (c) 2012, C. McCann, 2015-2019 Oleg Grenrus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of C. McCann nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--semigroupoids LICENSE file:--  Copyright 2011-2015 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--semigroups LICENSE file:--  Copyright 2011-2015 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--serialise LICENSE file:--  Copyright (c) 2017, Duncan Coutts--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Duncan Coutts nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--shelly LICENSE file:--  Copyright (c) 2017, Petr Rockai <me@mornfall.net>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Petr Rockai nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--simple-sendfile LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--sourcemap LICENSE file:--  Copyright (c) 2012, Chris Done--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Chris Done nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--split LICENSE file:--  Copyright (c) 2008 Brent Yorgey, Louis Wasserman--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of other contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--splitmix LICENSE file:--  Copyright (c) 2017, Oleg Grenrus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Oleg Grenrus nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--stm LICENSE file:--  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--stm-chans LICENSE file:--  === stm-chans license ===--  Copyright (c) 2011--2013, wren gayle romano.-  ALL RIGHTS RESERVED.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of the copyright holders nor the names of-        other contributors may be used to endorse or promote products-        derived from this software without specific prior written-        permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.---streaming-commons LICENSE file:--  The MIT License (MIT)--  Copyright (c) 2014 FP Complete--  Permission is hereby granted, free of charge, to any person obtaining a copy-  of this software and associated documentation files (the "Software"), to deal-  in the Software without restriction, including without limitation the rights-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell-  copies of the Software, and to permit persons to whom the Software is-  furnished to do so, subject to the following conditions:--  The above copyright notice and this permission notice shall be included in all-  copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE-  SOFTWARE.--strict LICENSE file:--  Copyright (c) Roman Leshchinskiy 2006-2007--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.--stringsearch LICENSE file:--  Copyright (c)2010, Daniel Fischer--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Daniel Fischer nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--syb LICENSE file:--  This library (libraries/syb) is derived from code from several-  sources:--    * Code from the GHC project which is largely (c) The University of-      Glasgow, and distributable under a BSD-style license (see below),--    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones-      and freely redistributable (but see the full license for-      restrictions).--    * Code from the Haskell Foreign Function Interface specification,-      which is (c) Manuel M. T. Chakravarty and freely redistributable-      (but see the full license for restrictions).--  The full text of these licenses is reproduced below.  All of the-  licenses are BSD-style or compatible.--  -------------------------------------------------------------------------------  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--  -------------------------------------------------------------------------------  Code derived from the document "Report on the Programming Language-  Haskell 98", is distributed under the following license:--    Copyright (c) 2002 Simon Peyton Jones--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Language.--  -------------------------------------------------------------------------------  Code derived from the document "The Haskell 98 Foreign Function-  Interface, An Addendum to the Haskell 98 Report" is distributed under-  the following license:--    Copyright (c) 2002 Manuel M. T. Chakravarty--    The authors intend this Report to belong to the entire Haskell-    community, and so we grant permission to copy and distribute it for-    any purpose, provided that it is reproduced in its entirety,-    including this Notice.  Modified versions of this Report may also be-    copied and distributed for any purpose, provided that the modified-    version is clearly presented as such, and that it does not claim to-    be a definition of the Haskell 98 Foreign Function Interface.--  -------------------------------------------------------------------------------tagged LICENSE file:--  Copyright (c) 2009-2015 Edward Kmett-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Edward Kmett nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--tagsoup LICENSE file:--  Copyright Neil Mitchell 2006-2019.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Neil Mitchell nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--template-haskell LICENSE file:---  The Glasgow Haskell Compiler License--  Copyright 2002-2007, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.---text LICENSE file:--  Copyright (c) 2008-2009, Tom Harper-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--th-abstraction LICENSE file:--  Copyright (c) 2017-2020 Eric Mertens--  Permission to use, copy, modify, and/or distribute this software for any purpose-  with or without fee is hereby granted, provided that the above copyright notice-  and this permission notice appear in all copies.--  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH-  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,-  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS-  OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER-  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF-  THIS SOFTWARE.--th-compat LICENSE file:--  Copyright (c) 2020, Ryan Scott--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Ryan Scott nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--these LICENSE file:--  Copyright (c) 2012, C. McCann, 2015-2019 Oleg Grenrus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of C. McCann nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--time LICENSE file:--  TimeLib is Copyright (c) Ashley Yakeley, 2004-2014. All rights reserved.-  Certain sections are Copyright 2004, The University Court of the University of Glasgow. All rights reserved.--  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.--  - Neither name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--time-compat LICENSE file:--  Copyright (c) 2019 time contibutors, Oleg Grenrus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Oleg Grenrus nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--time-manager LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--transformers LICENSE file:--  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--transformers-base LICENSE file:--  Copyright (c) 2011, Mikhail Vorozhtsov, Bas van Dijk-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-    this list of conditions and the following disclaimer.-  - Redistributions in binary form must reproduce the above copyright-    notice, this list of conditions and the following disclaimer in the-    documentation and/or other materials provided with the distribution.-  - Neither the names of the copyright owners nor the names of the-    contributors may be used to endorse or promote products derived-    from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.---transformers-compat LICENSE file:--  Copyright 2012-2015 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--type-equality LICENSE file:--  Copyright (c) 2009 Erik Hesselink, 2019 Oleg Grenrus, Ryan Scott--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of authors nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--typed-process LICENSE file:--  Copyright (c) 2016 FP Complete, https://www.fpcomplete.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--uniplate LICENSE file:--  Copyright Neil Mitchell 2006-2020.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Neil Mitchell nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--unix LICENSE file:--  The Glasgow Haskell Compiler License--  Copyright 2004, The University Court of the University of Glasgow.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.--unix-compat LICENSE file:--  Copyright (c) 2007-2008, Björn Bringert-  Copyright (c) 2007-2009, Duncan Coutts-  Copyright (c) 2010-2011, Jacob Stanley-  Copyright (c)      2011, Bryan O'Sullivan-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-    this list of conditions and the following disclaimer.-  - Redistributions in binary form must reproduce the above copyright-    notice, this list of conditions and the following disclaimer in the-    documentation and/or other materials provided with the distribution.-  - Neither the names of the copyright owners nor the names of the-    contributors may be used to endorse or promote products derived-    from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--unix-time LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--unliftio LICENSE file:--  Copyright (c) 2017 FP Complete--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be included-  in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--unliftio-core LICENSE file:--  Copyright (c) 2017 FP Complete--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be included-  in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--unordered-containers LICENSE file:--  Copyright (c) 2010, Johan Tibell--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Johan Tibell nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--utf8-string LICENSE file:--  * Copyright (c) 2007, Galois Inc.-  * All rights reserved.-  *-  * Redistribution and use in source and binary forms, with or without-  * modification, are permitted provided that the following conditions are met:-  *     * Redistributions of source code must retain the above copyright-  *       notice, this list of conditions and the following disclaimer.-  *     * Redistributions in binary form must reproduce the above copyright-  *       notice, this list of conditions and the following disclaimer in the-  *       documentation and/or other materials provided with the distribution.-  *     * Neither the name of Galois Inc. nor the-  *       names of its contributors may be used to endorse or promote products-  *       derived from this software without specific prior written permission.-  *-  * THIS SOFTWARE IS PROVIDED BY Galois Inc. ``AS IS'' AND ANY-  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  * DISCLAIMED. IN NO EVENT SHALL Galois Inc. BE LIABLE FOR ANY-  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES-  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND-  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS-  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--uuid-types LICENSE file:--  Copyright (c) 2008, Antoine Latter--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are-  met:--      * Redistributions of source code must retain the above copyright-  notice, this list of conditions and the following disclaimer.-      * Redistributions in binary form must reproduce the above copyright-  notice, this list of conditions and the following disclaimer in the-  documentation and/or other materials provided with the distribution.-      * The names of the authors may not be used to endorse or promote-  products derived from this software without specific prior written-  permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED-  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR-  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--vault LICENSE file:--  Copyright (c)2011, Heinrich Apfelmus--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Heinrich Apfelmus nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--vector LICENSE file:--  Copyright (c) 2008-2012, Roman Leshchinskiy-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--  - Redistributions of source code must retain the above copyright notice,-  this list of conditions and the following disclaimer.--  - Redistributions in binary form must reproduce the above copyright notice,-  this list of conditions and the following disclaimer in the documentation-  and/or other materials provided with the distribution.--  - Neither name of the University nor the names of its contributors may be-  used to endorse or promote products derived from this software without-  specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF-  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH-  DAMAGE.---vector-algorithms LICENSE file:--  Copyright (c) 2015 Dan Doel-  Copyright (c) 2015 Tim Baumann--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--  --------------------------------------------------------------------------------  The code in Data.Array.Vector.Algorithms.Mutable.Optimal is adapted from a C-  algorithm for the same purpose. The folowing is the copyright notice for said-  C code:--  Copyright (c) 2004 Paul Hsieh-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      Redistributions of source code must retain the above copyright notice,-      this list of conditions and the following disclaimer.--      Redistributions in binary form must reproduce the above copyright notice,-      this list of conditions and the following disclaimer in the documentation-      and/or other materials provided with the distribution.--      Neither the name of sorttest nor the names of its contributors may be-      used to endorse or promote products derived from this software without-      specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--void LICENSE file:--  Copyright 2015 Edward Kmett--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.--  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.--  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR-  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--wai LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--wai-app-static LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--wai-extra LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--wai-logger LICENSE file:--  Copyright (c) 2009, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--wai-websockets LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--warp LICENSE file:--  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/--  Permission is hereby granted, free of charge, to any person obtaining-  a copy of this software and associated documentation files (the-  "Software"), to deal in the Software without restriction, including-  without limitation the rights to use, copy, modify, merge, publish,-  distribute, sublicense, and/or sell copies of the Software, and to-  permit persons to whom the Software is furnished to do so, subject to-  the following conditions:--  The above copyright notice and this permission notice shall be-  included in all copies or substantial portions of the Software.--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--websockets LICENSE file:--  Copyright Jasper Van der Jeugt, 2011--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions are met:--      * Redistributions of source code must retain the above copyright-        notice, this list of conditions and the following disclaimer.--      * Redistributions in binary form must reproduce the above-        copyright notice, this list of conditions and the following-        disclaimer in the documentation and/or other materials provided-        with the distribution.--      * Neither the name of Siniša Biđin nor the names of other-        contributors may be used to endorse or promote products derived-        from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--word8 LICENSE file:--  Copyright (c) 2012, IIJ Innovation Institute Inc.-  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:--    * Redistributions of source code must retain the above copyright-      notice, this list of conditions and the following disclaimer.-    * Redistributions in binary form must reproduce the above copyright-      notice, this list of conditions and the following disclaimer in-      the documentation and/or other materials provided with the-      distribution.-    * Neither the name of the copyright holders nor the names of its-      contributors may be used to endorse or promote products derived-      from this software without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS-  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE-  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN-  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE-  POSSIBILITY OF SUCH DAMAGE.--x509 LICENSE file:--  Copyright (c) 2010-2013 Vincent Hanquez <vincent@snarc.org>--  All rights reserved.--  Redistribution and use in source and binary forms, with or without-  modification, are permitted provided that the following conditions-  are met:-  1. Redistributions of source code must retain the above copyright-     notice, this list of conditions and the following disclaimer.-  2. Redistributions in binary form must reproduce the above copyright-     notice, this list of conditions and the following disclaimer in the-     documentation and/or other materials provided with the distribution.-  3. Neither the name of the author nor the names of his contributors-     may be used to endorse or promote products derived from this software-     without specific prior written permission.--  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-  SUCH DAMAGE.+  StateVar+  adjunctions+  aeson+  aeson-better-errors+  aeson-pretty+  alex+  ansi-terminal+  ansi-wl-pprint+  array+  assoc+  async+  attoparsec+  auto-update+  base+  base-compat+  base-compat-batteries+  base-orphans+  basement+  bifunctors+  binary+  blaze-builder+  blaze-html+  blaze-markup+  bower-json+  boxes+  bytestring+  cabal-doctest+  call-stack+  case-insensitive+  cborg+  cheapskate+  clock+  colour+  comonad+  conduit+  conduit-extra+  constraints+  containers+  contravariant+  cryptonite+  css-text+  data-default+  data-default-class+  data-default-instances-containers+  data-default-instances-dlist+  data-default-instances-old-locale+  data-fix+  data-ordlist+  deepseq+  directory+  distributive+  dlist+  easy-file+  edit-distance+  enclosed-exceptions+  exceptions+  fast-logger+  file-embed+  filepath+  free+  fsnotify+  ghc-prim+  half+  happy+  hashable+  haskeline+  hinotify+  http-types+  indexed-traversable+  indexed-traversable-instances+  integer-gmp+  integer-logarithms+  invariant+  kan-extensions+  language-javascript+  lens+  lifted-async+  lifted-base+  memory+  microlens+  microlens-ghc+  microlens-mtl+  microlens-platform+  microlens-th+  monad-control+  monad-logger+  monad-loops+  mono-traversable+  monoidal-containers+  mtl+  mtl-compat+  network+  network-uri+  newtype+  old-locale+  old-time+  optparse-applicative+  parallel+  parsec+  pattern-arrows+  pretty+  primitive+  process+  profunctors+  protolude+  random+  reflection+  regex-base+  regex-tdfa+  resourcet+  safe+  scientific+  semialign+  semigroupoids+  semigroups+  serialise+  shelly+  sourcemap+  split+  splitmix+  stm+  stm-chans+  streaming-commons+  strict+  stringsearch+  syb+  tagged+  tagsoup+  template-haskell+  text+  th-abstraction+  th-compat+  these+  time+  time-compat+  transformers+  transformers-base+  transformers-compat+  type-equality+  typed-process+  uniplate+  unix+  unix-compat+  unix-time+  unliftio-core+  unordered-containers+  utf8-string+  uuid-types+  vector+  vector-algorithms+  void+  witherable+  xss-sanitize+  zlib++Cabal LICENSE file:++  Copyright (c) 2003-2017, Cabal Development Team.+  See the AUTHORS file for the full list of copyright holders.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Isaac Jones nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++Glob LICENSE file:++  The code in Glob is released under the license below. Copyrights to parts of+  the code are held by whoever wrote the code in question: see CREDITS.txt for a+  list of authors.++  Copyright (c) 2008-2018 <authors>+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:+      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright+        notice, this list of conditions and the following disclaimer in the+        documentation and/or other materials provided with the distribution.+      * Neither the name of the project nor the names of its contributors may be+        used to endorse or promote products derived from this software without+        specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO+  EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++StateVar LICENSE file:++  Copyright (c) 2014-2015, Edward Kmett+  Copyright (c) 2009-2021, Sven Panne+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  1. Redistributions of source code must retain the above copyright notice,+     this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of its contributors may be+     used to endorse or promote products derived from this software without+     specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++adjunctions LICENSE file:++  Copyright 2011-2014 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++aeson LICENSE file:++  Copyright (c) 2011, MailRank, Inc. 2014-2021 Aeson project contributors++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++aeson-better-errors LICENSE file:++  Copyright (c) 2015 Harry Garrood++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be included+  in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++aeson-pretty LICENSE file:++  Copyright (c)2011, Falko Peters++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Falko Peters nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++alex LICENSE file:++  Copyright (c) 1995-2011, Chris Dornan and Simon Marlow+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of the copyright holders, nor the names of the+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++ansi-terminal LICENSE file:++  Copyright (c) 2008, Maximilian Bolingbroke+  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification, are permitted+  provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright notice, this list of+        conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright notice, this list of+        conditions and the following disclaimer in the documentation and/or other materials+        provided with the distribution.+      * Neither the name of Maximilian Bolingbroke nor the names of other contributors may be used to+        endorse or promote products derived from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT+  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++ansi-wl-pprint LICENSE file:++  Copyright 2008, Daan Leijen and Max Bolingbroke. All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above copyright+      notice, this list of conditions and the following disclaimer in+      the documentation and/or other materials provided with the+      distribution.++  This software is provided by the copyright holders "as is" and any+  express or implied warranties, including, but not limited to, the+  implied warranties of merchantability and fitness for a particular+  purpose are disclaimed. In no event shall the copyright holders be+  liable for any direct, indirect, incidental, special, exemplary, or+  consequential damages (including, but not limited to, procurement of+  substitute goods or services; loss of use, data, or profits; or+  business interruption) however caused and on any theory of liability,+  whether in contract, strict liability, or tort (including negligence+  or otherwise) arising in any way out of the use of this software, even+  if advised of the possibility of such damage.++array LICENSE file:++  This library (libraries/base) is derived from code from several+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++    * Code from the Haskell Foreign Function Interface specification,+      which is (c) Manuel M. T. Chakravarty and freely redistributable+      (but see the full license for restrictions).++  The full text of these licenses is reproduced below.  All of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++  Code derived from the document "The Haskell 98 Foreign Function+  Interface, An Addendum to the Haskell 98 Report" is distributed under+  the following license:++    Copyright (c) 2002 Manuel M. T. Chakravarty++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Foreign Function Interface.++  -----------------------------------------------------------------------------+++assoc LICENSE file:++  Copyright (c) 2017, Oleg Grenrus++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Oleg Grenrus nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++async LICENSE file:++  Copyright (c) 2012, Simon Marlow++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Simon Marlow nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++attoparsec LICENSE file:++  Copyright (c) Lennart Kolmodin++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++auto-update LICENSE file:++  Copyright (c) 2014 Michael Snoyman++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be included+  in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++base LICENSE file:++  This library (libraries/base) is derived from code from several+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++    * Code from the Haskell Foreign Function Interface specification,+      which is (c) Manuel M. T. Chakravarty and freely redistributable+      (but see the full license for restrictions).++  The full text of these licenses is reproduced below.  All of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++  Code derived from the document "The Haskell 98 Foreign Function+  Interface, An Addendum to the Haskell 98 Report" is distributed under+  the following license:++    Copyright (c) 2002 Manuel M. T. Chakravarty++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Foreign Function Interface.++  -----------------------------------------------------------------------------++base-compat LICENSE file:++  Copyright (c) 2012-2018 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com>++  Permission is hereby granted, free of charge, to any person obtaining a copy+  of this software and associated documentation files (the "Software"), to deal+  in the Software without restriction, including without limitation the rights+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+  copies of the Software, and to permit persons to whom the Software is+  furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in+  all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+  THE SOFTWARE.++base-compat-batteries LICENSE file:++  Copyright (c) 2012-2018 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com>++  Permission is hereby granted, free of charge, to any person obtaining a copy+  of this software and associated documentation files (the "Software"), to deal+  in the Software without restriction, including without limitation the rights+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+  copies of the Software, and to permit persons to whom the Software is+  furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in+  all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+  THE SOFTWARE.++base-orphans LICENSE file:++  Copyright (c) 2015-2017 Simon Hengel <sol@typeful.net>, João Cristóvão <jmacristovao@gmail.com>, Ryan Scott <ryan.gl.scott@gmail.com>++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be included+  in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++basement LICENSE file:++  Copyright (c) 2015-2017 Vincent Hanquez <vincent@snarc.org>+  Copyright (c) 2017-2019 Foundation Maintainers++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:+  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++bifunctors LICENSE file:++  Copyright 2008-2016 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++binary LICENSE file:++  Copyright (c) Lennart Kolmodin++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++blaze-builder LICENSE file:++  Copyright Jasper Van der Jeugt 2010, Simon Meier 2010 & 2011++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Jasper Van der Jeugt nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++blaze-html LICENSE file:++  Copyright Jasper Van der Jeugt 2010++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Jasper Van der Jeugt nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++blaze-markup LICENSE file:++  Copyright Jasper Van der Jeugt 2010++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Jasper Van der Jeugt nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++bower-json LICENSE file:++  Copyright (c) 2015 Harry Garrood++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be included+  in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++boxes LICENSE file:++  Copyright (c) Brent Yorgey 2008++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:+  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of other contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  All other rights are reserved.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++bytestring LICENSE file:++  Copyright (c) Don Stewart 2005-2009+            (c) Duncan Coutts 2006-2015+            (c) David Roundy 2003-2005+            (c) Simon Meier 2010-2011++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:+  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++cabal-doctest LICENSE file:++  Copyright (c) 2017, Oleg Grenrus++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Oleg Grenrus nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++call-stack LICENSE file:++  Copyright (c) 2016-2021 Simon Hengel <sol@typeful.net>++  Permission is hereby granted, free of charge, to any person obtaining a copy+  of this software and associated documentation files (the "Software"), to deal+  in the Software without restriction, including without limitation the rights+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+  copies of the Software, and to permit persons to whom the Software is+  furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in+  all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+  THE SOFTWARE.++case-insensitive LICENSE file:++  Copyright (c) 2011-2013 Bas van Dijk++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * The name of Bas van Dijk and the names of contributors may NOT+        be used to endorse or promote products derived from this+        software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++cborg LICENSE file:++  Copyright (c) 2015-2017 Duncan Coutts,+                2015-2017 Well-Typed LLP,+                2015 IRIS Connect Ltd.++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Duncan Coutts nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++cheapskate LICENSE file:++  Copyright (c) 2013, John MacFarlane++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of John MacFarlane nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++clock LICENSE file:++  Copyright (c) 2009-2012, Cetin Sert+  Copyright (c) 2010, Eugene Kirpichov++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * The names of contributors may not be used to endorse or promote+        products derived from this software without specific prior+        written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++colour LICENSE file:++  Copyright (c) 2008, 2009+  Russell O'Connor++  Permission is hereby granted, free of charge, to any person obtaining a copy+  of this software and associated documentation files (the "Software"), to deal+  in the Software without restriction, including without limitation the rights+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+  copies of the Software, and to permit persons to whom the Software is+  furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in+  all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+  THE SOFTWARE.++comonad LICENSE file:++  Copyright 2008-2014 Edward Kmett+  Copyright 2004-2008 Dave Menendez++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++conduit LICENSE file:++  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++conduit-extra LICENSE file:++  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++constraints LICENSE file:++  Copyright 2011-2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++containers LICENSE file:++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++contravariant LICENSE file:++  Copyright 2007-2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++cryptonite LICENSE file:++  Copyright (c) 2006-2015 Vincent Hanquez <vincent@snarc.org>++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++css-text LICENSE file:++  Copyright (c) 2010 Michael Snoyman, http://www.yesodweb.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++data-default LICENSE file:++  Copyright (c) 2013 Lukas Mai++  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification,+  are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice, this+    list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright notice,+    this list of conditions and the following disclaimer in the documentation+    and/or other materials provided with the distribution.+  * Neither the name of the author nor the names of his contributors+    may be used to endorse or promote products derived from this software+    without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++data-default-class LICENSE file:++  Copyright (c) 2013 Lukas Mai++  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification,+  are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice, this+    list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright notice,+    this list of conditions and the following disclaimer in the documentation+    and/or other materials provided with the distribution.+  * Neither the name of the author nor the names of his contributors+    may be used to endorse or promote products derived from this software+    without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++data-default-instances-containers LICENSE file:++  Copyright (c) 2013 Lukas Mai++  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification,+  are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice, this+    list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright notice,+    this list of conditions and the following disclaimer in the documentation+    and/or other materials provided with the distribution.+  * Neither the name of the author nor the names of his contributors+    may be used to endorse or promote products derived from this software+    without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY LUKAS MAI AND CONTRIBUTORS "AS IS" AND ANY+  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON+  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++data-default-instances-dlist LICENSE file:++  Copyright (c) 2013 Lukas Mai++  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification,+  are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice, this+    list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright notice,+    this list of conditions and the following disclaimer in the documentation+    and/or other materials provided with the distribution.+  * Neither the name of the author nor the names of his contributors+    may be used to endorse or promote products derived from this software+    without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY LUKAS MAI AND CONTRIBUTORS "AS IS" AND ANY+  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON+  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++data-default-instances-old-locale LICENSE file:++  Copyright (c) 2013 Lukas Mai++  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification,+  are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice, this+    list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright notice,+    this list of conditions and the following disclaimer in the documentation+    and/or other materials provided with the distribution.+  * Neither the name of the author nor the names of his contributors+    may be used to endorse or promote products derived from this software+    without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY LUKAS MAI AND CONTRIBUTORS "AS IS" AND ANY+  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON+  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++data-fix LICENSE file:++  Copyright Anton Kholomiov 2010++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Anton Kholomiov nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++data-ordlist LICENSE file:++  Copyright (c) 2009-2010, Melding Monads+  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.+      * Neither the name of Melding Monads nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++deepseq LICENSE file:++  This library (deepseq) is derived from code from the GHC project which+  is largely (c) The University of Glasgow, and distributable under a+  BSD-style license (see below).++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2001-2009, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++directory LICENSE file:++  This library (libraries/base) is derived from code from two+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++  The full text of these licenses is reproduced below.  Both of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++distributive LICENSE file:++  Copyright 2011-2016 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++dlist LICENSE file:++  Copyright © 2006-2009 Don Stewart, 2013-2020 Sean Leather, contributors++  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification,+  are permitted provided that the following conditions are met:++  1. Redistributions of source code must retain the above copyright notice, this+     list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright notice,+     this list of conditions and the following disclaimer in the documentation+     and/or other materials provided with the distribution.++  3. Neither the name of the copyright holders nor the names of other contributors+     may be used to endorse or promote products derived from this software without+     specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR+  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF+  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++easy-file LICENSE file:++  Copyright (c) 2009, IIJ Innovation Institute Inc.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.+    * Redistributions in binary form must reproduce the above copyright+      notice, this list of conditions and the following disclaimer in+      the documentation and/or other materials provided with the+      distribution.+    * Neither the name of the copyright holders nor the names of its+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS+  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++edit-distance LICENSE file:++  Copyright (c) 2008-2013 Maximilian Bolingbroke+  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification, are permitted+  provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright notice, this list of+        conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright notice, this list of+        conditions and the following disclaimer in the documentation and/or other materials+        provided with the distribution.+      * Neither the name of Maximilian Bolingbroke nor the names of other contributors may be used to+        endorse or promote products derived from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT+  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++enclosed-exceptions LICENSE file:++  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++exceptions LICENSE file:++  Copyright 2013-2015 Edward Kmett+  Copyright 2012 Google Inc.++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++fast-logger LICENSE file:++  Copyright (c) 2009, IIJ Innovation Institute Inc.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.+    * Redistributions in binary form must reproduce the above copyright+      notice, this list of conditions and the following disclaimer in+      the documentation and/or other materials provided with the+      distribution.+    * Neither the name of the copyright holders nor the names of its+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS+  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++file-embed LICENSE file:++  The following license covers this documentation, and the source code, except+  where otherwise indicated.++  Copyright 2008, Michael Snoyman. All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice, this+    list of conditions and the following disclaimer.++  * Redistributions in binary form must reproduce the above copyright notice,+    this list of conditions and the following disclaimer in the documentation+    and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO+  EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT+  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,+  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++filepath LICENSE file:++  Copyright Neil Mitchell 2005-2018.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Neil Mitchell nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++free LICENSE file:++  Copyright 2008-2013 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++fsnotify LICENSE file:++  Copyright (c) 2012, Mark Dittmer++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Mark Dittmer nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++ghc-prim LICENSE file:++  This library (libraries/ghc-prim) is derived from code from several+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++  The full text of these licenses is reproduced below.  All of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.+++half LICENSE file:++  Copyright 2014 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++happy LICENSE file:++  The Happy License+  -----------------++  Copyright 2001, Simon Marlow and Andy Gill.  All rights reserved.++  Extensions to implement Tomita's Generalized LR parsing:+    Copyright 2004, University of Durham, Paul Callaghan and Ben Medlock.+    All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY+  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR+  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++hashable LICENSE file:++  Copyright Milan Straka 2010++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Milan Straka nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++haskeline LICENSE file:++  Copyright 2007 Judah Jacobson++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  1. Redistributions of source code must retain the above copyright notice, this+  list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  3. Neither the name of the copyright holder nor the names of its contributors+  may be used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++hinotify LICENSE file:++  Copyright (c) Lennart Kolmodin++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++http-types LICENSE file:++  Copyright (c) 2011, Aristid Breitkreuz+  Copyright (c) 2011, Michael Snoyman++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Aristid Breitkreuz nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++indexed-traversable LICENSE file:++  Copyright 2012-2016 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++indexed-traversable-instances LICENSE file:++  Copyright 2012-2016 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++integer-gmp LICENSE file:++  Copyright (c) 2014, Herbert Valerio Riedel++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Herbert Valerio Riedel nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++integer-logarithms LICENSE file:++  Copyright (c) 2011 Daniel Fischer, 2017 Oleg Grenrus++  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and+   associated documentation files (the "Software"), to deal in the Software without restriction,+   including without limitation the rights to use, copy, modify, merge, publish, distribute,+   sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is+   furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in all copies or+  substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT+  LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN+   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++invariant LICENSE file:++  Copyright (c) 2012-2017, University of Kansas+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright notice, this+      list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above copyright notice,+      this list of conditions and the following disclaimer in the documentation+      and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++kan-extensions LICENSE file:++  Copyright 2008-2016 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++language-javascript LICENSE file:++  Copyright (c)2010, Alan Zimmerman++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Alan Zimmerman nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++lens LICENSE file:++  Copyright 2012-2016 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++lifted-async LICENSE file:++  Copyright (c) 2012-2017, Mitsutoshi Aoe++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Mitsutoshi Aoe nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++lifted-base LICENSE file:++  Copyright © 2010-2012, Bas van Dijk, Anders Kaseorg+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++  • Redistributions of source code must retain the above copyright+    notice, this list of conditions and the following disclaimer.++  • Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in the+    documentation and/or other materials provided with the distribution.++  • Neither the name of the author nor the names of other contributors+    may be used to endorse or promote products derived from this+    software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT+  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++memory LICENSE file:++  Copyright (c) 2015-2018 Vincent Hanquez <vincent@snarc.org>+  Copyright (c) 2017-2018 Nicolas Di Prima <nicolas@primetype.co.uk>++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++microlens LICENSE file:++  Copyright (c) 2013-2016 Edward Kmett,+                2015-2016 Artyom Kazak,+                2018 Monadfix++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Monadfix nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++microlens-ghc LICENSE file:++  Copyright (c) 2013-2016 Edward Kmett,+                2015-2016 Artyom Kazak,+                2018 Monadfix++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Monadfix nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++microlens-mtl LICENSE file:++  Copyright (c) 2013-2016 Edward Kmett,+                2015-2016 Artyom Kazak,+                2018 Monadfix++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Monadfix nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++microlens-platform LICENSE file:++  Copyright (c) 2012-2016 Edward Kmett,+                2015-2016 Artyom Kazak,+                2018 Monadfix++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Monadfix nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++microlens-th LICENSE file:++  Copyright (c) 2013-2016 Eric Mertens, Edward Kmett, Artyom Kazak+                2018 Monadfix++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Monadfix nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++monad-control LICENSE file:++  Copyright © 2010, Bas van Dijk, Anders Kaseorg+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++  • Redistributions of source code must retain the above copyright+    notice, this list of conditions and the following disclaimer.++  • Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in the+    documentation and/or other materials provided with the distribution.++  • Neither the name of the author nor the names of other contributors+    may be used to endorse or promote products derived from this+    software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT+  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++monad-logger LICENSE file:++  Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++mono-traversable LICENSE file:++  Copyright (c) 2013 Michael Snoyman, http://www.fpcomplete.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++monoidal-containers LICENSE file:++  Copyright (c) 2015, Ben Gamari++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Ben Gamari nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++mtl LICENSE file:++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++mtl-compat LICENSE file:++  Copyright (c) 2015-2017, Ryan Scott++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Ryan Scott nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++network LICENSE file:++  Copyright (c) 2002-2010, The University Court of the University of Glasgow.+  Copyright (c) 2007-2010, Johan Tibell++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++network-uri LICENSE file:++  Copyright (c) 2002-2010, The University Court of the University of Glasgow.+  Copyright (c) 2007-2010, Johan Tibell++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++newtype LICENSE file:++  Copyright (c) 2011, Darius Jahandarie+                2019, Herbert Valerio Riedel++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Darius Jahandarie nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++old-locale LICENSE file:++  This library (libraries/base) is derived from code from two+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++  The full text of these licenses is reproduced below.  Both of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++old-time LICENSE file:++  This library (libraries/base) is derived from code from two+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++  The full text of these licenses is reproduced below.  Both of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++optparse-applicative LICENSE file:++  Copyright (c) 2012, Paolo Capriotti++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Paolo Capriotti nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++parallel LICENSE file:++  This library (libraries/parallel) is derived from code from+  the GHC project which is largely (c) The University of+  Glasgow, and distributable under a BSD-style license (see below).++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++parsec LICENSE file:++  Copyright 1999-2000, Daan Leijen; 2007, Paolo Martini. All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  * Redistributions of source code must retain the above copyright notice,+    this list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in the+    documentation and/or other materials provided with the distribution.++  This software is provided by the copyright holders "as is" and any express or+  implied warranties, including, but not limited to, the implied warranties of+  merchantability and fitness for a particular purpose are disclaimed. In no+  event shall the copyright holders be liable for any direct, indirect,+  incidental, special, exemplary, or consequential damages (including, but not+  limited to, procurement of substitute goods or services; loss of use, data,+  or profits; or business interruption) however caused and on any theory of+  liability, whether in contract, strict liability, or tort (including+  negligence or otherwise) arising in any way out of the use of this software,+  even if advised of the possibility of such damage.++pattern-arrows LICENSE file:++  The MIT License (MIT)++  Copyright (c) 2013 Phil Freeman++  Permission is hereby granted, free of charge, to any person obtaining a copy of+  this software and associated documentation files (the "Software"), to deal in+  the Software without restriction, including without limitation the rights to+  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of+  the Software, and to permit persons to whom the Software is furnished to do so,+  subject to the following conditions:++  The above copyright notice and this permission notice shall be included in all+  copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS+  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR+  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER+  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN+  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++pretty LICENSE file:++  This library (libraries/pretty) is derived from code from+  the GHC project which is largely (c) The University of+  Glasgow, and distributable under a BSD-style license (see below).++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++primitive LICENSE file:++  Copyright (c) 2008-2009, Roman Leshchinskiy+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.+++process LICENSE file:++  This library (libraries/process) is derived from code from two+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++  The full text of these licenses is reproduced below.  Both of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++profunctors LICENSE file:++  Copyright 2011-2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++protolude LICENSE file:++  Copyright (c) 2016-2020, Stephen Diehl++  Permission is hereby granted, free of charge, to any person obtaining a copy+  of this software and associated documentation files (the "Software"), to+  deal in the Software without restriction, including without limitation the+  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or+  sell copies of the Software, and to permit persons to whom the Software is+  furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in+  all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING+  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS+  IN THE SOFTWARE.++random LICENSE file:++  This library (libraries/base) is derived from code from two+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++  The full text of these licenses is reproduced below.  Both of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++reflection LICENSE file:++  Copyright (c) 2009-2013 Edward Kmett+  Copyright (c) 2004 Oleg Kiselyov and Chung-chieh Shan+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Edward Kmett nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++regex-base LICENSE file:++  This modile is under this "3 clause" BSD license:++  Copyright (c) 2007, Christopher Kuklewicz+  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.+      * The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++regex-tdfa LICENSE file:++  This modile is under this "3 clause" BSD license:++  Copyright (c) 2007-2009, Christopher Kuklewicz+  All rights reserved.++  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.+      * The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++resourcet LICENSE file:++  Copyright (c)2011, Michael Snoyman++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Michael Snoyman nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++safe LICENSE file:++  Copyright Neil Mitchell 2007-2020.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Neil Mitchell nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++scientific LICENSE file:++  Copyright (c) 2013, Bas van Dijk++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Bas van Dijk nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++semialign LICENSE file:++  Copyright (c) 2012, C. McCann, 2015-2019 Oleg Grenrus++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of C. McCann nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++semigroupoids LICENSE file:++  Copyright 2011-2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++semigroups LICENSE file:++  Copyright 2011-2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++serialise LICENSE file:++  Copyright (c) 2017, Duncan Coutts++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Duncan Coutts nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++shelly LICENSE file:++  Copyright (c) 2017, Petr Rockai <me@mornfall.net>++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Petr Rockai nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++sourcemap LICENSE file:++  Copyright (c) 2012, Chris Done++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Chris Done nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++split LICENSE file:++  Copyright (c) 2008 Brent Yorgey, Louis Wasserman++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:+  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of other contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++splitmix LICENSE file:++  Copyright (c) 2017, Oleg Grenrus++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Oleg Grenrus nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++stm LICENSE file:++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++stm-chans LICENSE file:++  === stm-chans license ===++  Copyright (c) 2011--2013, wren gayle romano.+  ALL RIGHTS RESERVED.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of the copyright holders nor the names of+        other contributors may be used to endorse or promote products+        derived from this software without specific prior written+        permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS+  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.+++streaming-commons LICENSE file:++  The MIT License (MIT)++  Copyright (c) 2014 FP Complete++  Permission is hereby granted, free of charge, to any person obtaining a copy+  of this software and associated documentation files (the "Software"), to deal+  in the Software without restriction, including without limitation the rights+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+  copies of the Software, and to permit persons to whom the Software is+  furnished to do so, subject to the following conditions:++  The above copyright notice and this permission notice shall be included in all+  copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+  SOFTWARE.++strict LICENSE file:++  Copyright (c) Roman Leshchinskiy 2006-2007++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.+  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.+  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGE.++stringsearch LICENSE file:++  Copyright (c)2010, Daniel Fischer++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Daniel Fischer nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++syb LICENSE file:++  This library (libraries/syb) is derived from code from several+  sources:++    * Code from the GHC project which is largely (c) The University of+      Glasgow, and distributable under a BSD-style license (see below),++    * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+      and freely redistributable (but see the full license for+      restrictions).++    * Code from the Haskell Foreign Function Interface specification,+      which is (c) Manuel M. T. Chakravarty and freely redistributable+      (but see the full license for restrictions).++  The full text of these licenses is reproduced below.  All of the+  licenses are BSD-style or compatible.++  -----------------------------------------------------------------------------++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++  -----------------------------------------------------------------------------++  Code derived from the document "Report on the Programming Language+  Haskell 98", is distributed under the following license:++    Copyright (c) 2002 Simon Peyton Jones++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Language.++  -----------------------------------------------------------------------------++  Code derived from the document "The Haskell 98 Foreign Function+  Interface, An Addendum to the Haskell 98 Report" is distributed under+  the following license:++    Copyright (c) 2002 Manuel M. T. Chakravarty++    The authors intend this Report to belong to the entire Haskell+    community, and so we grant permission to copy and distribute it for+    any purpose, provided that it is reproduced in its entirety,+    including this Notice.  Modified versions of this Report may also be+    copied and distributed for any purpose, provided that the modified+    version is clearly presented as such, and that it does not claim to+    be a definition of the Haskell 98 Foreign Function Interface.++  -----------------------------------------------------------------------------++tagged LICENSE file:++  Copyright (c) 2009-2015 Edward Kmett+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Edward Kmett nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++tagsoup LICENSE file:++  Copyright Neil Mitchell 2006-2019.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Neil Mitchell nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++template-haskell LICENSE file:+++  The Glasgow Haskell Compiler License++  Copyright 2002-2007, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.+++text LICENSE file:++  Copyright (c) 2008-2009, Tom Harper+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++th-abstraction LICENSE file:++  Copyright (c) 2017-2020 Eric Mertens++  Permission to use, copy, modify, and/or distribute this software for any purpose+  with or without fee is hereby granted, provided that the above copyright notice+  and this permission notice appear in all copies.++  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH+  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,+  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS+  OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER+  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF+  THIS SOFTWARE.++th-compat LICENSE file:++  Copyright (c) 2020, Ryan Scott++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Ryan Scott nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++these LICENSE file:++  Copyright (c) 2012, C. McCann, 2015-2019 Oleg Grenrus++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of C. McCann nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++time LICENSE file:++  TimeLib is Copyright (c) Ashley Yakeley, 2004-2014. All rights reserved.+  Certain sections are Copyright 2004, The University Court of the University of Glasgow. All rights reserved.++  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.++  - Neither name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++time-compat LICENSE file:++  Copyright (c) 2019 time contibutors, Oleg Grenrus++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Oleg Grenrus nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++transformers LICENSE file:++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++transformers-base LICENSE file:++  Copyright (c) 2011, Mikhail Vorozhtsov, Bas van Dijk+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+    this list of conditions and the following disclaimer.+  - Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in the+    documentation and/or other materials provided with the distribution.+  - Neither the names of the copyright owners nor the names of the+    contributors may be used to endorse or promote products derived+    from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.+++transformers-compat LICENSE file:++  Copyright 2012-2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++type-equality LICENSE file:++  Copyright (c) 2009 Erik Hesselink, 2019 Oleg Grenrus, Ryan Scott++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of authors nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++typed-process LICENSE file:++  Copyright (c) 2016 FP Complete, https://www.fpcomplete.com/++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be+  included in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++uniplate LICENSE file:++  Copyright Neil Mitchell 2006-2020.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Neil Mitchell nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++unix LICENSE file:++  The Glasgow Haskell Compiler License++  Copyright 2004, The University Court of the University of Glasgow.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.++unix-compat LICENSE file:++  Copyright (c) 2007-2008, Björn Bringert+  Copyright (c) 2007-2009, Duncan Coutts+  Copyright (c) 2010-2011, Jacob Stanley+  Copyright (c)      2011, Bryan O'Sullivan+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+    this list of conditions and the following disclaimer.+  - Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in the+    documentation and/or other materials provided with the distribution.+  - Neither the names of the copyright owners nor the names of the+    contributors may be used to endorse or promote products derived+    from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++unix-time LICENSE file:++  Copyright (c) 2009, IIJ Innovation Institute Inc.+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.+    * Redistributions in binary form must reproduce the above copyright+      notice, this list of conditions and the following disclaimer in+      the documentation and/or other materials provided with the+      distribution.+    * Neither the name of the copyright holders nor the names of its+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS+  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++unliftio-core LICENSE file:++  Copyright (c) 2017 FP Complete++  Permission is hereby granted, free of charge, to any person obtaining+  a copy of this software and associated documentation files (the+  "Software"), to deal in the Software without restriction, including+  without limitation the rights to use, copy, modify, merge, publish,+  distribute, sublicense, and/or sell copies of the Software, and to+  permit persons to whom the Software is furnished to do so, subject to+  the following conditions:++  The above copyright notice and this permission notice shall be included+  in all copies or substantial portions of the Software.++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++unordered-containers LICENSE file:++  Copyright (c) 2010, Johan Tibell++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Johan Tibell nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++utf8-string LICENSE file:++  * Copyright (c) 2007, Galois Inc.+  * All rights reserved.+  *+  * Redistribution and use in source and binary forms, with or without+  * modification, are permitted provided that the following conditions are met:+  *     * Redistributions of source code must retain the above copyright+  *       notice, this list of conditions and the following disclaimer.+  *     * Redistributions in binary form must reproduce the above copyright+  *       notice, this list of conditions and the following disclaimer in the+  *       documentation and/or other materials provided with the distribution.+  *     * Neither the name of Galois Inc. nor the+  *       names of its contributors may be used to endorse or promote products+  *       derived from this software without specific prior written permission.+  *+  * THIS SOFTWARE IS PROVIDED BY Galois Inc. ``AS IS'' AND ANY+  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  * DISCLAIMED. IN NO EVENT SHALL Galois Inc. BE LIABLE FOR ANY+  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND+  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++uuid-types LICENSE file:++  Copyright (c) 2008, Antoine Latter++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are+  met:++      * Redistributions of source code must retain the above copyright+  notice, this list of conditions and the following disclaimer.+      * Redistributions in binary form must reproduce the above copyright+  notice, this list of conditions and the following disclaimer in the+  documentation and/or other materials provided with the distribution.+      * The names of the authors may not be used to endorse or promote+  products derived from this software without specific prior written+  permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED+  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++vector LICENSE file:++  Copyright (c) 2008-2012, Roman Leshchinskiy+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++  - Redistributions of source code must retain the above copyright notice,+  this list of conditions and the following disclaimer.++  - Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++  - Neither name of the University nor the names of its contributors may be+  used to endorse or promote products derived from this software without+  specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+  GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+  UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+  DAMAGE.+++vector-algorithms LICENSE file:++  Copyright (c) 2015 Dan Doel+  Copyright (c) 2015 Tim Baumann++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++  ------------------------------------------------------------------------------++  The code in Data.Array.Vector.Algorithms.Mutable.Optimal is adapted from a C+  algorithm for the same purpose. The folowing is the copyright notice for said+  C code:++  Copyright (c) 2004 Paul Hsieh+  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      Redistributions of source code must retain the above copyright notice,+      this list of conditions and the following disclaimer.++      Redistributions in binary form must reproduce the above copyright notice,+      this list of conditions and the following disclaimer in the documentation+      and/or other materials provided with the distribution.++      Neither the name of sorttest nor the names of its contributors may be+      used to endorse or promote products derived from this software without+      specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++void LICENSE file:++  Copyright 2015 Edward Kmett++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions+  are met:++  1. Redistributions of source code must retain the above copyright+     notice, this list of conditions and the following disclaimer.++  2. Redistributions in binary form must reproduce the above copyright+     notice, this list of conditions and the following disclaimer in the+     documentation and/or other materials provided with the distribution.++  3. Neither the name of the author nor the names of his contributors+     may be used to endorse or promote products derived from this software+     without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+  POSSIBILITY OF SUCH DAMAGE.++witherable LICENSE file:++  Copyright (c) 2014, Fumiaki Kinoshita++  All rights reserved.++  Redistribution and use in source and binary forms, with or without+  modification, are permitted provided that the following conditions are met:++      * Redistributions of source code must retain the above copyright+        notice, this list of conditions and the following disclaimer.++      * Redistributions in binary form must reproduce the above+        copyright notice, this list of conditions and the following+        disclaimer in the documentation and/or other materials provided+        with the distribution.++      * Neither the name of Fumiaki Kinoshita nor the names of other+        contributors may be used to endorse or promote products derived+        from this software without specific prior written permission.++  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  xss-sanitize LICENSE file: 
app/Command/Bundle.hs view
@@ -3,141 +3,21 @@  import Prelude -import           Data.Traversable (for)-import           Data.Aeson (encode)-import           Data.Aeson.Encode.Pretty (confCompare, defConfig, encodePretty', keyOrder)-import           Data.Maybe (isNothing)-import           Data.Text (Text)-import           Control.Applicative-import           Control.Monad-import           Control.Monad.Error.Class-import           Control.Monad.Trans.Except-import           Control.Monad.IO.Class-import           System.FilePath (takeDirectory, (</>), (<.>), takeFileName)-import           System.FilePath.Glob (glob) import           System.Exit (exitFailure)-import           System.IO (stderr, hPutStr, hPutStrLn)-import           System.IO.UTF8 (readUTF8File, writeUTF8File)-import           System.Directory (createDirectoryIfMissing, getCurrentDirectory)-import qualified Data.ByteString.Lazy.UTF8 as LBU8-import           Language.PureScript.Bundle-import           Options.Applicative (Parser)+import           System.IO (stderr, hPutStrLn) import qualified Options.Applicative as Opts-import           SourceMap-import           SourceMap.Types --- | Command line options.-data Options = Options-  { optionsInputFiles  :: [FilePath]-  , optionsOutputFile  :: Maybe FilePath-  , optionsEntryPoints :: [String]-  , optionsMainModule  :: Maybe String-  , optionsNamespace   :: String-  , optionsSourceMaps  :: Bool-  , optionsDebug       :: Bool-  } deriving Show---- | The main application function.--- This function parses the input files, performs dead code elimination, filters empty modules--- and generates and prints the final Javascript bundle.-app :: (MonadError ErrorMessage m, MonadIO m) => Options -> m (Maybe SourceMapping, String)-app Options{..} = do-  inputFiles <- concat <$> mapM (liftIO . glob) optionsInputFiles-  when (null inputFiles) . liftIO $ do-    hPutStrLn stderr "purs bundle: No input files."-    exitFailure-  when (isNothing optionsOutputFile && optionsSourceMaps) . liftIO $ do-    hPutStrLn stderr "purs bundle: Source maps only supported when output file specified."-    exitFailure--  input <- for inputFiles $ \filename -> do-    js <- liftIO (readUTF8File filename)-    mid <- guessModuleIdentifier filename-    length js `seq` return (mid, Just filename, js)                                            -- evaluate readFile till EOF before returning, not to exhaust file handles--  let entryIds = map (`ModuleIdentifier` Regular) optionsEntryPoints--  currentDir <- liftIO getCurrentDirectory-  let outFile = if optionsSourceMaps then fmap (currentDir </>) optionsOutputFile else Nothing-  let withRawModules = if optionsDebug then Just bundleDebug else Nothing-  bundleSM input entryIds optionsMainModule optionsNamespace outFile withRawModules---- | Print a JSON representation of a list of modules to stderr.-bundleDebug :: (MonadIO m) => [Module] -> m ()-bundleDebug = liftIO . hPutStrLn stderr . LBU8.toString . encodePretty' (defConfig { confCompare = keyComparer })-  where-  -- | Some key order hints for improved readability.-  keyComparer :: Text -> Text -> Ordering-  keyComparer =  keyOrder ["type", "name", "moduleId"]     -- keys to put first-              <> flip (keyOrder ["dependsOn", "elements"]) -- keys to put last---- | Command line options parser.-options :: Parser Options-options = Options <$> some inputFile-                  <*> optional outputFile-                  <*> many entryPoint-                  <*> optional mainModule-                  <*> namespace-                  <*> sourceMaps-                  <*> debug-  where-  inputFile :: Parser FilePath-  inputFile = Opts.strArgument $-       Opts.metavar "FILE"-    <> Opts.help "The input .js file(s)"--  outputFile :: Parser FilePath-  outputFile = Opts.strOption $-       Opts.short 'o'-    <> Opts.long "output"-    <> Opts.help "The output .js file"--  entryPoint :: Parser String-  entryPoint = Opts.strOption $-       Opts.short 'm'-    <> Opts.long "module"-    <> Opts.help "Entry point module name(s). All code which is not a transitive dependency of an entry point module will be removed."--  mainModule :: Parser String-  mainModule = Opts.strOption $-       Opts.long "main"-    <> Opts.help "Generate code to run the main method in the specified module."--  namespace :: Parser String-  namespace = Opts.strOption $-       Opts.short 'n'-    <> Opts.long "namespace"-    <> Opts.value "PS"-    <> Opts.showDefault-    <> Opts.help "Specify the namespace that PureScript modules will be exported to when running in the browser."--  sourceMaps :: Parser Bool-  sourceMaps = Opts.switch $-       Opts.long "source-maps"-    <> Opts.help "Whether to generate source maps for the bundle (requires --output)."--  debug :: Parser Bool-  debug = Opts.switch $-       Opts.long "debug"-    <> Opts.help "Whether to emit a JSON representation of all parsed modules to stderr."+app :: IO ()+app = do+  hPutStrLn stderr $ unlines+    [ "'purs bundle' was removed in the v0.15.0 release."+    , "See https://www.github.com/purescript/documentation/migration-guides/0.15-Migration-Guide.md "+    , "for more information and bundler alternatives."+    ]+  exitFailure  -- | Make it go. command :: Opts.Parser (IO ())-command = run <$> (Opts.helper <*> options) where-  run :: Options -> IO ()-  run opts = do-    output <- runExceptT (app opts)-    case output of-      Left err -> do-        hPutStr stderr (unlines (printErrorMessage err))-        exitFailure-      Right (sourcemap, js) ->-        case optionsOutputFile opts of-          Just outputFile -> do-            createDirectoryIfMissing True (takeDirectory outputFile)-            case sourcemap of-              Just sm -> do-                writeUTF8File outputFile $ js ++ "\n//# sourceMappingURL=" ++ (takeFileName outputFile <.> "map") ++ "\n"-                writeUTF8File (outputFile <.> "map") $ LBU8.toString . encode $ generate sm-              Nothing -> writeUTF8File outputFile js-          Nothing -> putStrLn js+command = run <$> (Opts.helper <*> pure ()) where+  run :: () -> IO ()+  run _ = app
app/Command/REPL.hs view
@@ -1,20 +1,11 @@ {-# LANGUAGE DoAndIfThenElse #-} {-# LANGUAGE GADTs #-}-{-# LANGUAGE TemplateHaskell #-}  module Command.REPL (command) where  import           Prelude () import           Prelude.Compat import           Control.Applicative (many, (<|>))-import           Control.Concurrent (forkIO)-import           Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, takeMVar,-                                         tryPutMVar)-import           Control.Concurrent.STM (TVar, atomically, newTVarIO, writeTVar,-                                        readTVarIO,-                                        TChan, newBroadcastTChanIO, dupTChan,-                                        readTChan, writeTChan)-import           Control.Exception (fromException, SomeException) import           Control.Monad import           Control.Monad.Catch (MonadMask) import           Control.Monad.IO.Class (liftIO, MonadIO)@@ -22,31 +13,18 @@ import           Control.Monad.Trans.Except (ExceptT(..), runExceptT) import           Control.Monad.Trans.State.Strict (StateT, evalStateT) import           Control.Monad.Trans.Reader (ReaderT, runReaderT)-import           Data.FileEmbed (embedStringFile) import           Data.Foldable (for_)-import           Data.String (IsString(..))-import           Data.Text (Text, unpack)-import           Data.Traversable (for) import qualified Language.PureScript as P-import qualified Language.PureScript.Bundle as Bundle import qualified Language.PureScript.CST as CST import           Language.PureScript.Interactive-import           Network.HTTP.Types.Header (hContentType, hCacheControl,-                                            hPragma, hExpires)-import           Network.HTTP.Types.Status (status200, status404, status503)-import qualified Network.Wai as Wai-import qualified Network.Wai.Handler.Warp as Warp-import qualified Network.Wai.Handler.WebSockets as WS-import qualified Network.WebSockets as WS import qualified Options.Applicative as Opts import           System.Console.Haskeline import           System.IO.UTF8 (readUTF8File) import           System.Exit import           System.Directory (doesFileExist, getCurrentDirectory) import           System.FilePath ((</>))-import           System.FilePath.Glob (glob)-import           System.Process (readProcessWithExitCode)-import qualified Data.ByteString.Lazy.UTF8 as U+import qualified System.FilePath.Glob as Glob+import System.IO (hPutStrLn, stderr)  -- | Command line options data PSCiOptions = PSCiOptions@@ -78,7 +56,7 @@ port = Opts.option Opts.auto $      Opts.long "port"   <> Opts.short 'p'-  <> Opts.help "The web server port"+  <> Opts.help "The browser REPL backend was removed in v0.15.0. Use https://try.purescript.org instead."  backend :: Opts.Parser Backend backend =@@ -105,22 +83,6 @@     go :: [String] -> InputT m String     go ls = maybe (return . unlines $ reverse ls) (go . (:ls)) =<< getInputLine "… " --- | Make a JavaScript bundle for the browser.-bundle :: IO (Either Bundle.ErrorMessage String)-bundle = runExceptT $ do-  inputFiles <- liftIO (glob (".psci_modules" </> "node_modules" </> "*" </> "*.js"))-  input <- for inputFiles $ \filename -> do-    js <- liftIO (readUTF8File filename)-    mid <- Bundle.guessModuleIdentifier filename-    length js `seq` return (mid, js)-  Bundle.bundle input [] Nothing "PSCI"--indexJS :: IsString string => string-indexJS = $(embedStringFile "app/static/index.js")--indexPage :: IsString string => string-indexPage = $(embedStringFile "app/static/index.html")- -- | All of the functions required to implement a PSCi backend data Backend = forall state. Backend   { _backendSetup :: IO state@@ -133,144 +95,13 @@   -- ^ Shut down the backend   } --- | Commands which can be sent to the browser-data BrowserCommand-  = Eval (MVar String)-  -- ^ Evaluate the latest JS-  | Refresh-  -- ^ Refresh the page---- | State for the browser backend-data BrowserState = BrowserState-  { browserCommands       :: TChan BrowserCommand-  -- ^ A channel which receives data when the compiled JS has-  -- been updated-  , browserShutdownNotice :: MVar ()-  -- ^ An MVar which becomes full when the server should shut down-  , browserIndexJS        :: TVar (Maybe String)-  -- ^ A TVar holding the latest compiled JS-  , browserBundleJS       :: TVar (Maybe String)-  -- ^ A TVar holding the latest bundled JS-  }- browserBackend :: Int -> Backend-browserBackend serverPort = Backend setup evaluate reload shutdown+browserBackend _ = Backend setup mempty mempty mempty   where-    setup :: IO BrowserState+    setup :: IO ()     setup = do-      shutdownVar <- newEmptyMVar-      cmdChan <- newBroadcastTChanIO-      indexJs <- newTVarIO Nothing-      bundleJs <- newTVarIO Nothing--      let-        handleWebsocket :: WS.PendingConnection -> IO ()-        handleWebsocket pending = do-          conn <- WS.acceptRequest pending-          -- Fork a thread to keep the connection alive-          WS.withPingThread conn 10 (pure ()) $ do-            -- Clone the command channel-            cmdChanCopy <- atomically $ dupTChan cmdChan-            -- Listen for commands-            forever $ do-              cmd <- atomically $ readTChan cmdChanCopy-              case cmd of-                Eval resultVar -> void $ do-                  WS.sendTextData conn ("eval" :: Text)-                  result <- WS.receiveData conn-                  -- With many connected clients, all but one of-                  -- these attempts will fail.-                  tryPutMVar resultVar (unpack result)-                Refresh ->-                  WS.sendTextData conn ("reload" :: Text)--        shutdownHandler :: IO () -> IO ()-        shutdownHandler stopServer = void . forkIO $ do-          () <- takeMVar shutdownVar-          stopServer--        onException :: Maybe Wai.Request -> SomeException -> IO ()-        onException req ex-          | Just (_ :: WS.ConnectionException) <- fromException ex-          = return () -- ignore websocket disconnects-          | otherwise = Warp.defaultOnException req ex--        staticServer :: Wai.Application-        staticServer req respond =-          case Wai.pathInfo req of-            [] ->-              respond $ Wai.responseLBS status200-                                        [(hContentType, "text/html; charset=UTF-8")]-                                        (U.fromString indexPage)-            ["js", "index.js"] ->-              respond $ Wai.responseLBS status200-                                        [(hContentType, "application/javascript")]-                                        (U.fromString indexJS)-            ["js", "latest.js"] -> do-              may <- readTVarIO indexJs-              case may of-                Nothing ->-                  respond $ Wai.responseLBS status503 [] "Service not available"-                Just js ->-                  respond $ Wai.responseLBS status200-                                            [ (hContentType, "application/javascript")-                                            , (hCacheControl, "no-cache, no-store, must-revalidate")-                                            , (hPragma, "no-cache")-                                            , (hExpires, "0")-                                            ]-                                            (U.fromString js)-            ["js", "bundle.js"] -> do-              may <- readTVarIO bundleJs-              case may of-                Nothing ->-                  respond $ Wai.responseLBS status503 [] "Service not available"-                Just js ->-                  respond $ Wai.responseLBS status200-                                            [ (hContentType, "application/javascript")]-                                            (U.fromString js)-            _ -> respond $ Wai.responseLBS status404 [] "Not found"--      let browserState = BrowserState cmdChan shutdownVar indexJs bundleJs-      createBundle browserState--      putStrLn $ "Serving http://localhost:" <> show serverPort <> "/. Waiting for connections..."-      _ <- forkIO $ Warp.runSettings ( Warp.setInstallShutdownHandler shutdownHandler-                                     . Warp.setPort serverPort-                                     . Warp.setOnException onException-                                     $ Warp.defaultSettings-                                     ) $-                      WS.websocketsOr WS.defaultConnectionOptions-                                      handleWebsocket-                                      staticServer-      return browserState--    createBundle :: BrowserState -> IO ()-    createBundle state = do-      putStrLn "Bundling JavaScript..."-      ejs <- bundle-      case ejs of-        Left err -> do-          putStrLn (unlines (Bundle.printErrorMessage err))-          exitFailure-        Right js ->-          atomically $ writeTVar (browserBundleJS state) (Just js)--    reload :: BrowserState -> IO ()-    reload state = do-      createBundle state-      atomically $ writeTChan (browserCommands state) Refresh--    shutdown :: BrowserState -> IO ()-    shutdown state = putMVar (browserShutdownNotice state) ()--    evaluate :: BrowserState -> String -> IO ()-    evaluate state js = liftIO $ do-      resultVar <- newEmptyMVar-      atomically $ do-        writeTVar (browserIndexJS state) (Just js)-        writeTChan (browserCommands state) (Eval resultVar)-      result <- takeMVar resultVar-      putStrLn result+      hPutStrLn stderr "The browser REPL backend was removed in v0.15.0. Use TryPureScript instead: https://try.purescript.org"+      exitFailure  nodeBackend :: Maybe FilePath -> [String] -> Backend nodeBackend nodePath nodeArgs = Backend setup eval reload shutdown@@ -280,13 +111,12 @@      eval :: () -> String -> IO ()     eval _ _ = do-      writeFile indexFile "require('$PSCI')['$main']();"-      process <- maybe findNodeProcess (pure . pure) nodePath-      result <- traverse (\node -> readProcessWithExitCode node (nodeArgs ++ [indexFile]) "") process+      writeFile indexFile "import('./$PSCI/index.js').then(({ $main }) => $main());"+      result <- readNodeProcessWithExitCode nodePath (nodeArgs ++ [indexFile]) ""       case result of-        Just (ExitSuccess, out, _)   -> putStrLn out-        Just (ExitFailure _, _, err) -> putStrLn err-        Nothing                      -> putStrLn "Could not find node.js. Do you have node.js installed and available in your PATH?"+        Right (ExitSuccess, out, _)   -> putStrLn out+        Right (ExitFailure _, _, err) -> putStrLn err+        Left err                      -> putStrLn err      reload :: () -> IO ()     reload _ = return ()@@ -303,7 +133,7 @@   where     loop :: PSCiOptions -> IO ()     loop PSCiOptions{..} = do-        inputFiles <- concat <$> traverse glob psciInputGlob+        inputFiles <- concat <$> traverse Glob.glob psciInputGlob         e <- runExceptT $ do           modules <- ExceptT (loadAllModules inputFiles)           when (null modules) . liftIO $ do
app/Main.hs view
@@ -60,7 +60,7 @@       (Opts.subparser . fold)         [ Opts.command "bundle"             (Opts.info Bundle.command-              (Opts.progDesc "Bundle compiled PureScript modules for the browser"))+              (Opts.progDesc "This command was removed in v0.15.0. Run this command for migration information."))         , Opts.command "compile"             (Opts.info Compile.command               (Opts.progDesc "Compile PureScript source files"))
− app/static/index.html
@@ -1,10 +0,0 @@-<!DOCTYPE html>-<html>-<head>-  <title>PureScript Interactive</title>-  <script src='js/bundle.js'></script>-  <script src='js/index.js'></script>-</head>-<body>-</body>-</html>
− app/static/index.js
@@ -1,63 +0,0 @@-var get = function get(uri, callback, onError) {-    var request = new XMLHttpRequest();-    request.addEventListener('load', function() {-        callback(request.responseText);-    });-    request.addEventListener('error', onError);-    request.open('GET', uri);-    request.send();-};-var evaluate = function evaluate(js) {-    var buffer = [];-    // Save the old console.log function-    var oldLog = console.log;-    console.log = function(s) {-        // Push log output into a temporary buffer-        // which will be returned to PSCi.-        buffer.push(s);-    };-    // Replace any require(...) statements with lookups on the PSCI object.-    var replaced = js.replace(/require\("[^"]*"\)/g, function(s) {-        return "PSCI['" + s.split('/')[1] + "']";-    });-    // Wrap the module and evaluate it.-    var wrapped =-      [ 'var module = {};'-      , '(function(module) {'-      , replaced-      , '})(module);'-      , 'return module.exports["$main"] && module.exports["$main"]();'-    ].join('\n');-    new Function(wrapped)();-    // Restore console.log-    console.log = oldLog;-    return buffer.join('\n');-};-window.onload = function() {-    var socket = new WebSocket('ws://localhost:' + location.port);-    var evalNext = function reload() {-        get('js/latest.js', function(response) {-            try {-                var result = evaluate(response);-                socket.send(result);-            } catch (ex) {-                socket.send(ex.stack);-            }-        }, function(err) {-            socket.send('Error sending JavaScript');-        });-    };-    socket.onopen = function() {-        console.log('Connected');-        socket.onmessage = function(event) {-            switch (event.data) {-                case 'eval':-                    evalNext();-                    break;-                case 'reload':-                    location.reload();-                    break;-            }-        };-    };-};
purescript.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               purescript-version:            0.14.9+version:            0.15.0 license:            BSD-3-Clause license-file:       LICENSE copyright:@@ -20,9 +20,7 @@ category:           Language build-type:         Simple extra-source-files:-    app/static/*.html     app/static/*.css-    app/static/*.js     app/static/*.less     bundle/build.sh     bundle/README@@ -57,7 +55,18 @@ library     exposed-modules:         Control.Monad.Logger+        Control.Monad.Supply+        Control.Monad.Supply.Class         Language.PureScript+        Language.PureScript.AST+        Language.PureScript.AST.Binders+        Language.PureScript.AST.Declarations+        Language.PureScript.AST.Declarations.ChainId+        Language.PureScript.AST.Exported+        Language.PureScript.AST.Literals+        Language.PureScript.AST.Operators+        Language.PureScript.AST.SourcePos+        Language.PureScript.AST.Traversals         Language.PureScript.Bundle         Language.PureScript.CodeGen         Language.PureScript.CodeGen.JS@@ -72,6 +81,7 @@         Language.PureScript.CoreFn.Desugar         Language.PureScript.CoreFn.Expr         Language.PureScript.CoreFn.FromJSON+        Language.PureScript.CoreFn.Laziness         Language.PureScript.CoreFn.Meta         Language.PureScript.CoreFn.Module         Language.PureScript.CoreFn.Optimizer@@ -79,6 +89,7 @@         Language.PureScript.CoreFn.Traversals         Language.PureScript.CoreImp         Language.PureScript.CoreImp.AST+        Language.PureScript.CoreImp.Module         Language.PureScript.CoreImp.Optimizer         Language.PureScript.CoreImp.Optimizer.Blocks         Language.PureScript.CoreImp.Optimizer.Common@@ -87,6 +98,22 @@         Language.PureScript.CoreImp.Optimizer.TCO         Language.PureScript.CoreImp.Optimizer.Unused         Language.PureScript.CST+        Language.PureScript.CST.Convert+        Language.PureScript.CST.Errors+        Language.PureScript.CST.Flatten+        Language.PureScript.CST.Layout+        Language.PureScript.CST.Lexer+        Language.PureScript.CST.Monad+        Language.PureScript.CST.Parser+        Language.PureScript.CST.Positions+        Language.PureScript.CST.Print+        Language.PureScript.CST.Traversals+        Language.PureScript.CST.Traversals.Type+        Language.PureScript.CST.Types+        Language.PureScript.CST.Utils+        Language.PureScript.Comments+        Language.PureScript.Constants.Prim+        Language.PureScript.Crash         Language.PureScript.Docs         Language.PureScript.Docs.AsHtml         Language.PureScript.Docs.AsMarkdown@@ -103,6 +130,7 @@         Language.PureScript.Docs.Tags         Language.PureScript.Docs.Types         Language.PureScript.Docs.Utils.MonoidExtras+        Language.PureScript.Environment         Language.PureScript.Errors         Language.PureScript.Errors.JSON         Language.PureScript.Externs@@ -136,26 +164,31 @@         Language.PureScript.Interactive.Parser         Language.PureScript.Interactive.Printer         Language.PureScript.Interactive.Types+        Language.PureScript.Label         Language.PureScript.Linter         Language.PureScript.Linter.Exhaustive         Language.PureScript.Linter.Imports+        Language.PureScript.Linter.Wildcards         Language.PureScript.Make         Language.PureScript.Make.Actions         Language.PureScript.Make.BuildPlan         Language.PureScript.Make.Cache         Language.PureScript.Make.Monad         Language.PureScript.ModuleDependencies+        Language.PureScript.Names         Language.PureScript.Options         Language.PureScript.Pretty         Language.PureScript.Pretty.Common         Language.PureScript.Pretty.Types         Language.PureScript.Pretty.Values+        Language.PureScript.PSString         Language.PureScript.Publish         Language.PureScript.Publish.BoxesHelpers         Language.PureScript.Publish.ErrorsWarnings         Language.PureScript.Publish.Registry.Compat         Language.PureScript.Publish.Utils         Language.PureScript.Renamer+        Language.PureScript.Roles         Language.PureScript.Sugar         Language.PureScript.Sugar.AdoNotation         Language.PureScript.Sugar.BindingGroups@@ -176,9 +209,11 @@         Language.PureScript.Sugar.TypeClasses         Language.PureScript.Sugar.TypeClasses.Deriving         Language.PureScript.Sugar.TypeDeclarations+        Language.PureScript.Traversals         Language.PureScript.TypeChecker         Language.PureScript.TypeChecker.Entailment         Language.PureScript.TypeChecker.Entailment.Coercible+        Language.PureScript.TypeChecker.Entailment.IntCompare         Language.PureScript.TypeChecker.Kinds         Language.PureScript.TypeChecker.Monad         Language.PureScript.TypeChecker.Roles@@ -188,11 +223,16 @@         Language.PureScript.TypeChecker.Types         Language.PureScript.TypeChecker.TypeSearch         Language.PureScript.TypeChecker.Unify+        Language.PureScript.TypeClassDictionaries+        Language.PureScript.Types         System.IO.UTF8      build-tool-depends: happy:happy ==1.20.0     hs-source-dirs:     src-    other-modules:      Paths_purescript+    other-modules:+        Data.Text.PureScript+        Paths_purescript+     autogen-modules:    Paths_purescript     default-language:   Haskell2010     default-extensions:@@ -243,13 +283,13 @@         microlens-platform >=0.4.2 && <0.5,         monad-control >=1.0.3.1 && <1.1,         monad-logger >=0.3.36 && <0.4,+        monoidal-containers >=0.6.2.0 && <0.7,         mtl >=2.2.2 && <2.3,         parallel >=3.2.2.0 && <3.3,         parsec >=3.1.14.0 && <3.2,         pattern-arrows >=0.0.2 && <0.1,         process ==1.6.13.1,         protolude >=0.3.0 && <0.4,-        purescript-cst ==0.5.0.0,         regex-tdfa >=1.3.1.1 && <1.4,         safe >=0.3.19 && <0.4,         scientific >=0.3.7.0 && <0.4,@@ -340,13 +380,13 @@         microlens-platform >=0.4.2 && <0.5,         monad-control >=1.0.3.1 && <1.1,         monad-logger >=0.3.36 && <0.4,+        monoidal-containers >=0.6.2.0 && <0.7,         mtl >=2.2.2 && <2.3,         parallel >=3.2.2.0 && <3.3,         parsec >=3.1.14.0 && <3.2,         pattern-arrows >=0.0.2 && <0.1,         process ==1.6.13.1,         protolude >=0.3.0 && <0.4,-        purescript-cst ==0.5.0.0,         regex-tdfa >=1.3.1.1 && <1.4,         safe >=0.3.19 && <0.4,         scientific >=0.3.7.0 && <0.4,@@ -372,11 +412,7 @@         http-types >=0.12.3 && <0.13,         network >=3.1.1.1 && <3.2,         optparse-applicative >=0.16.1.0 && <0.17,-        purescript -any,-        wai >=3.2.3 && <3.3,-        wai-websockets >=3.0.1.2 && <3.1,-        warp >=3.3.14 && <3.4,-        websockets >=0.12.7.2 && <0.13+        purescript -any      if flag(release)         cpp-options: -DRELEASE@@ -404,7 +440,6 @@         Language.PureScript.Ide.Test         Language.PureScript.Ide.UsageSpec         PscIdeSpec-        TestBundle         TestCompiler         TestCoreFn         TestCst@@ -472,13 +507,13 @@         microlens-platform >=0.4.2 && <0.5,         monad-control >=1.0.3.1 && <1.1,         monad-logger >=0.3.36 && <0.4,+        monoidal-containers >=0.6.2.0 && <0.7,         mtl >=2.2.2 && <2.3,         parallel >=3.2.2.0 && <3.3,         parsec >=3.1.14.0 && <3.2,         pattern-arrows >=0.0.2 && <0.1,         process ==1.6.13.1,         protolude >=0.3.0 && <0.4,-        purescript-cst ==0.5.0.0,         regex-tdfa >=1.3.1.1 && <1.4,         safe >=0.3.19 && <0.4,         scientific >=0.3.7.0 && <0.4,
+ src/Control/Monad/Supply.hs view
@@ -0,0 +1,21 @@+-- |+-- Fresh variable supply+--+module Control.Monad.Supply where++import Prelude.Compat++import Control.Applicative+import Control.Monad.Error.Class (MonadError(..))+import Control.Monad.Reader+import Control.Monad.State+import Control.Monad.Writer++newtype SupplyT m a = SupplyT { unSupplyT :: StateT Integer m a }+  deriving (Functor, Applicative, Monad, MonadTrans, MonadError e, MonadWriter w, MonadReader r, Alternative, MonadPlus)++runSupplyT :: Integer -> SupplyT m a -> m (a, Integer)+runSupplyT n = flip runStateT n . unSupplyT++evalSupplyT :: (Functor m) => Integer -> SupplyT m a -> m a+evalSupplyT n = fmap fst . runSupplyT n
+ src/Control/Monad/Supply/Class.hs view
@@ -0,0 +1,33 @@+-- |+-- A class for monads supporting a supply of fresh names+--++module Control.Monad.Supply.Class where++import Prelude.Compat++import Control.Monad.Supply+import Control.Monad.State+import Control.Monad.Writer+import Data.Text (Text, pack)++class Monad m => MonadSupply m where+  fresh :: m Integer+  peek :: m Integer+  default fresh :: (MonadTrans t, MonadSupply n, m ~ t n) => m Integer+  fresh = lift fresh+  default peek :: (MonadTrans t, MonadSupply n, m ~ t n) => m Integer+  peek = lift peek++instance Monad m => MonadSupply (SupplyT m) where+  fresh = SupplyT $ do+    n <- get+    put (n + 1)+    return n+  peek = SupplyT get++instance MonadSupply m => MonadSupply (StateT s m)+instance (Monoid w, MonadSupply m) => MonadSupply (WriterT w m)++freshName :: MonadSupply m => m Text+freshName = fmap (("$" <> ) . pack . show) fresh
+ src/Data/Text/PureScript.hs view
@@ -0,0 +1,23 @@+-- |+-- This module contains internal extensions to Data.Text.+--+module Data.Text.PureScript (spanUpTo) where++import Prelude++import Data.Text.Internal (Text(..), text)+import Data.Text.Unsafe (Iter(..), iter)++-- | /O(n)/ 'spanUpTo', applied to a number @n@, predicate @p@, and text @t@,+-- returns a pair whose first element is the longest prefix (possibly empty) of+-- @t@ of length less than or equal to @n@ of elements that satisfy @p@, and+-- whose second is the remainder of the text.+{-# INLINE spanUpTo #-}+spanUpTo :: Int -> (Char -> Bool) -> Text -> (Text, Text)+spanUpTo n p t@(Text arr off len) = (hd, tl)+  where hd = text arr off k+        tl = text arr (off + k) (len - k)+        !k = loop n 0+        loop !n' !i | n' > 0 && i < len && p c = loop (n' - 1) (i + d)+                    | otherwise                = i+            where Iter c d = iter t i
+ src/Language/PureScript/AST.hs view
@@ -0,0 +1,14 @@+-- |+-- The initial PureScript AST+--+module Language.PureScript.AST (+    module AST+) where++import Language.PureScript.AST.Binders as AST+import Language.PureScript.AST.Declarations as AST+import Language.PureScript.AST.Exported as AST+import Language.PureScript.AST.Literals as AST+import Language.PureScript.AST.Operators as AST+import Language.PureScript.AST.SourcePos as AST+import Language.PureScript.AST.Traversals as AST
+ src/Language/PureScript/AST/Binders.hs view
@@ -0,0 +1,159 @@+-- |+-- Case binders+--+module Language.PureScript.AST.Binders where++import Prelude.Compat++import Language.PureScript.AST.SourcePos+import Language.PureScript.AST.Literals+import Language.PureScript.Names+import Language.PureScript.Comments+import Language.PureScript.Types++-- |+-- Data type for binders+--+data Binder+  -- |+  -- Wildcard binder+  --+  = NullBinder+  -- |+  -- A binder which matches a literal+  --+  | LiteralBinder SourceSpan (Literal Binder)+  -- |+  -- A binder which binds an identifier+  --+  | VarBinder SourceSpan Ident+  -- |+  -- A binder which matches a data constructor+  --+  | ConstructorBinder SourceSpan (Qualified (ProperName 'ConstructorName)) [Binder]+  -- |+  -- A operator alias binder. During the rebracketing phase of desugaring,+  -- this data constructor will be removed.+  --+  | OpBinder SourceSpan (Qualified (OpName 'ValueOpName))+  -- |+  -- Binary operator application. During the rebracketing phase of desugaring,+  -- this data constructor will be removed.+  --+  | BinaryNoParensBinder Binder Binder Binder+  -- |+  -- Explicit parentheses. During the rebracketing phase of desugaring, this+  -- data constructor will be removed.+  --+  -- Note: although it seems this constructor is not used, it _is_ useful,+  -- since it prevents certain traversals from matching.+  --+  | ParensInBinder Binder+  -- |+  -- A binder which binds its input to an identifier+  --+  | NamedBinder SourceSpan Ident Binder+  -- |+  -- A binder with source position information+  --+  | PositionedBinder SourceSpan [Comment] Binder+  -- |+  -- A binder with a type annotation+  --+  | TypedBinder SourceType Binder+  deriving (Show)++-- Manual Eq and Ord instances for `Binder` were added on 2018-03-05. Comparing+-- the `SourceSpan` values embedded in some of the data constructors of `Binder`+-- was expensive. This made exhaustiveness checking observably slow for code+-- such as the `explode` function in `test/purs/passing/LargeSumTypes.purs`.+-- Custom instances were written to skip comparing the `SourceSpan` values. Only+-- the `Ord` instance was needed for the speed-up, but I did not want the `Eq`+-- to have mismatched behavior.+instance Eq Binder where+  NullBinder == NullBinder =+    True+  (LiteralBinder _ lb) == (LiteralBinder _ lb') =+    lb == lb'+  (VarBinder _ ident) == (VarBinder _ ident') =+    ident == ident'+  (ConstructorBinder _ qpc bs) == (ConstructorBinder _ qpc' bs') =+    qpc == qpc' && bs == bs'+  (OpBinder _ qov) == (OpBinder _ qov') =+    qov == qov'+  (BinaryNoParensBinder b1 b2 b3) == (BinaryNoParensBinder b1' b2' b3') =+    b1 == b1' && b2 == b2' && b3 == b3'+  (ParensInBinder b) == (ParensInBinder b') =+    b == b'+  (NamedBinder _ ident b) == (NamedBinder _ ident' b') =+    ident == ident' && b == b'+  (PositionedBinder _ comments b) == (PositionedBinder _ comments' b') =+    comments == comments' && b == b'+  (TypedBinder ty b) == (TypedBinder ty' b') =+    ty == ty' && b == b'+  _ == _ = False++instance Ord Binder where+  compare NullBinder NullBinder = EQ+  compare (LiteralBinder _ lb) (LiteralBinder _ lb') =+    compare lb lb'+  compare (VarBinder _ ident) (VarBinder _ ident') =+    compare ident ident'+  compare (ConstructorBinder _ qpc bs) (ConstructorBinder _ qpc' bs') =+    compare qpc qpc' <> compare bs bs'+  compare (OpBinder _ qov) (OpBinder _ qov') =+    compare qov qov'+  compare (BinaryNoParensBinder b1 b2 b3) (BinaryNoParensBinder b1' b2' b3') =+    compare b1 b1' <> compare b2 b2' <> compare b3 b3'+  compare (ParensInBinder b) (ParensInBinder b') =+    compare b b'+  compare (NamedBinder _ ident b) (NamedBinder _ ident' b') =+    compare ident ident' <> compare b b'+  compare (PositionedBinder _ comments b) (PositionedBinder _ comments' b') =+    compare comments comments' <> compare b b'+  compare (TypedBinder ty b) (TypedBinder ty' b') =+    compare ty ty' <> compare b b'+  compare binder binder' =+    compare (orderOf binder) (orderOf binder')+      where+        orderOf :: Binder -> Int+        orderOf NullBinder = 0+        orderOf LiteralBinder{} = 1+        orderOf VarBinder{} = 2+        orderOf ConstructorBinder{} = 3+        orderOf OpBinder{} = 4+        orderOf BinaryNoParensBinder{} = 5+        orderOf ParensInBinder{} = 6+        orderOf NamedBinder{} = 7+        orderOf PositionedBinder{} = 8+        orderOf TypedBinder{} = 9++-- |+-- Collect all names introduced in binders in an expression+--+binderNames :: Binder -> [Ident]+binderNames = map snd . binderNamesWithSpans++binderNamesWithSpans :: Binder -> [(SourceSpan, Ident)]+binderNamesWithSpans = go []+  where+  go ns (LiteralBinder _ b) = lit ns b+  go ns (VarBinder ss name) = (ss, name) : ns+  go ns (ConstructorBinder _ _ bs) = foldl go ns bs+  go ns (BinaryNoParensBinder b1 b2 b3) = foldl go ns [b1, b2, b3]+  go ns (ParensInBinder b) = go ns b+  go ns (NamedBinder ss name b) = go ((ss, name) : ns) b+  go ns (PositionedBinder _ _ b) = go ns b+  go ns (TypedBinder _ b) = go ns b+  go ns _ = ns+  lit ns (ObjectLiteral bs) = foldl go ns (map snd bs)+  lit ns (ArrayLiteral bs) = foldl go ns bs+  lit ns _ = ns+++isIrrefutable :: Binder -> Bool+isIrrefutable NullBinder = True+isIrrefutable (VarBinder _ _) = True+isIrrefutable (PositionedBinder _ _ b) = isIrrefutable b+isIrrefutable (TypedBinder _ b) = isIrrefutable b+isIrrefutable _ = False
+ src/Language/PureScript/AST/Declarations.hs view
@@ -0,0 +1,840 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE TemplateHaskell #-}++-- |+-- Data types for modules and declarations+--+module Language.PureScript.AST.Declarations where++import Prelude.Compat+import Protolude.Exceptions (hush)++import Codec.Serialise (Serialise)+import Control.DeepSeq (NFData)+import Data.Functor.Identity++import Data.Aeson.TH+import qualified Data.Map as M+import Data.Text (Text)+import qualified Data.List.NonEmpty as NEL+import GHC.Generics (Generic)++import Language.PureScript.AST.Binders+import Language.PureScript.AST.Literals+import Language.PureScript.AST.Operators+import Language.PureScript.AST.SourcePos+import Language.PureScript.AST.Declarations.ChainId (ChainId)+import Language.PureScript.Types+import Language.PureScript.PSString (PSString)+import Language.PureScript.Label (Label)+import Language.PureScript.Names+import Language.PureScript.Roles+import Language.PureScript.TypeClassDictionaries+import Language.PureScript.Comments+import Language.PureScript.Environment+import qualified Language.PureScript.Constants.Prim as C++-- | A map of locally-bound names in scope.+type Context = [(Ident, SourceType)]++-- | Holds the data necessary to do type directed search for typed holes+data TypeSearch+  = TSBefore Environment+  -- ^ An Environment captured for later consumption by type directed search+  | TSAfter+    { tsAfterIdentifiers :: [(Qualified Text, SourceType)]+    -- ^ The identifiers that fully satisfy the subsumption check+    , tsAfterRecordFields :: Maybe [(Label, SourceType)]+    -- ^ Record fields that are available on the first argument to the typed+    -- hole+    }+  -- ^ Results of applying type directed search to the previously captured+  -- Environment+  deriving Show++onTypeSearchTypes :: (SourceType -> SourceType) -> TypeSearch -> TypeSearch+onTypeSearchTypes f = runIdentity . onTypeSearchTypesM (Identity . f)++onTypeSearchTypesM :: (Applicative m) => (SourceType -> m SourceType) -> TypeSearch -> m TypeSearch+onTypeSearchTypesM f (TSAfter i r) = TSAfter <$> traverse (traverse f) i <*> traverse (traverse (traverse f)) r+onTypeSearchTypesM _ (TSBefore env) = pure (TSBefore env)++-- | Error message hints, providing more detailed information about failure.+data ErrorMessageHint+  = ErrorUnifyingTypes SourceType SourceType+  | ErrorInExpression Expr+  | ErrorInModule ModuleName+  | ErrorInInstance (Qualified (ProperName 'ClassName)) [SourceType]+  | ErrorInSubsumption SourceType SourceType+  | ErrorCheckingAccessor Expr PSString+  | ErrorCheckingType Expr SourceType+  | ErrorCheckingKind SourceType SourceType+  | ErrorCheckingGuard+  | ErrorInferringType Expr+  | ErrorInferringKind SourceType+  | ErrorInApplication Expr SourceType Expr+  | ErrorInDataConstructor (ProperName 'ConstructorName)+  | ErrorInTypeConstructor (ProperName 'TypeName)+  | ErrorInBindingGroup (NEL.NonEmpty Ident)+  | ErrorInDataBindingGroup [ProperName 'TypeName]+  | ErrorInTypeSynonym (ProperName 'TypeName)+  | ErrorInValueDeclaration Ident+  | ErrorInTypeDeclaration Ident+  | ErrorInTypeClassDeclaration (ProperName 'ClassName)+  | ErrorInKindDeclaration (ProperName 'TypeName)+  | ErrorInRoleDeclaration (ProperName 'TypeName)+  | ErrorInForeignImport Ident+  | ErrorInForeignImportData (ProperName 'TypeName)+  | ErrorSolvingConstraint SourceConstraint+  | MissingConstructorImportForCoercible (Qualified (ProperName 'ConstructorName))+  | PositionedError (NEL.NonEmpty SourceSpan)+  deriving (Show)++-- | Categories of hints+data HintCategory+  = ExprHint+  | KindHint+  | CheckHint+  | PositionHint+  | SolverHint+  | DeclarationHint+  | OtherHint+  deriving (Show, Eq)++-- |+-- A module declaration, consisting of comments about the module, a module name,+-- a list of declarations, and a list of the declarations that are+-- explicitly exported. If the export list is Nothing, everything is exported.+--+data Module = Module SourceSpan [Comment] ModuleName [Declaration] (Maybe [DeclarationRef])+  deriving (Show)++-- | Return a module's name.+getModuleName :: Module -> ModuleName+getModuleName (Module _ _ name _ _) = name++-- | Return a module's source span.+getModuleSourceSpan :: Module -> SourceSpan+getModuleSourceSpan (Module ss _ _ _ _) = ss++-- | Return a module's declarations.+getModuleDeclarations :: Module -> [Declaration]+getModuleDeclarations (Module _ _ _ declarations _) = declarations++-- |+-- Add an import declaration for a module if it does not already explicitly import it.+--+-- Will not import an unqualified module if that module has already been imported qualified.+-- (See #2197)+--+addDefaultImport :: Qualified ModuleName -> Module -> Module+addDefaultImport (Qualified toImportAs toImport) m@(Module ss coms mn decls exps) =+  if isExistingImport `any` decls || mn == toImport then m+  else Module ss coms mn (ImportDeclaration (ss, []) toImport Implicit toImportAs : decls) exps+  where+  isExistingImport (ImportDeclaration _ mn' _ as')+    | mn' == toImport =+        case toImportAs of+          Nothing -> True+          _ -> as' == toImportAs+  isExistingImport _ = False++-- | Adds import declarations to a module for an implicit Prim import and Prim+-- | qualified as Prim, as necessary.+importPrim :: Module -> Module+importPrim =+  let+    primModName = C.Prim+  in+    addDefaultImport (Qualified (Just primModName) primModName)+      . addDefaultImport (Qualified Nothing primModName)++data NameSource = UserNamed | CompilerNamed+  deriving (Show, Generic, NFData, Serialise)++-- |+-- An item in a list of explicit imports or exports+--+data DeclarationRef+  -- |+  -- A type class+  --+  = TypeClassRef SourceSpan (ProperName 'ClassName)+  -- |+  -- A type operator+  --+  | TypeOpRef SourceSpan (OpName 'TypeOpName)+  -- |+  -- A type constructor with data constructors+  --+  | TypeRef SourceSpan (ProperName 'TypeName) (Maybe [ProperName 'ConstructorName])+  -- |+  -- A value+  --+  | ValueRef SourceSpan Ident+  -- |+  -- A value-level operator+  --+  | ValueOpRef SourceSpan (OpName 'ValueOpName)+  -- |+  -- A type class instance, created during typeclass desugaring+  --+  | TypeInstanceRef SourceSpan Ident NameSource+  -- |+  -- A module, in its entirety+  --+  | ModuleRef SourceSpan ModuleName+  -- |+  -- A value re-exported from another module. These will be inserted during+  -- elaboration in name desugaring.+  --+  | ReExportRef SourceSpan ExportSource DeclarationRef+  deriving (Show, Generic, NFData, Serialise)++instance Eq DeclarationRef where+  (TypeClassRef _ name) == (TypeClassRef _ name') = name == name'+  (TypeOpRef _ name) == (TypeOpRef _ name') = name == name'+  (TypeRef _ name dctors) == (TypeRef _ name' dctors') = name == name' && dctors == dctors'+  (ValueRef _ name) == (ValueRef _ name') = name == name'+  (ValueOpRef _ name) == (ValueOpRef _ name') = name == name'+  (TypeInstanceRef _ name _) == (TypeInstanceRef _ name' _) = name == name'+  (ModuleRef _ name) == (ModuleRef _ name') = name == name'+  (ReExportRef _ mn ref) == (ReExportRef _ mn' ref') = mn == mn' && ref == ref'+  _ == _ = False++instance Ord DeclarationRef where+  TypeClassRef _ name `compare` TypeClassRef _ name' = compare name name'+  TypeOpRef _ name `compare` TypeOpRef _ name' = compare name name'+  TypeRef _ name dctors `compare` TypeRef _ name' dctors' = compare name name' <> compare dctors dctors'+  ValueRef _ name `compare` ValueRef _ name' = compare name name'+  ValueOpRef _ name `compare` ValueOpRef _ name' = compare name name'+  TypeInstanceRef _ name _ `compare` TypeInstanceRef _ name' _ = compare name name'+  ModuleRef _ name `compare` ModuleRef _ name' = compare name name'+  ReExportRef _ mn ref `compare` ReExportRef _ mn' ref' = compare mn mn' <> compare ref ref'+  compare ref ref' =+    compare (orderOf ref) (orderOf ref')+      where+        orderOf :: DeclarationRef -> Int+        orderOf TypeClassRef{} = 0+        orderOf TypeOpRef{} = 1+        orderOf TypeRef{} = 2+        orderOf ValueRef{} = 3+        orderOf ValueOpRef{} = 4+        orderOf TypeInstanceRef{} = 5+        orderOf ModuleRef{} = 6+        orderOf ReExportRef{} = 7++data ExportSource =+  ExportSource+  { exportSourceImportedFrom :: Maybe ModuleName+  , exportSourceDefinedIn :: ModuleName+  }+  deriving (Eq, Ord, Show, Generic, NFData, Serialise)++declRefSourceSpan :: DeclarationRef -> SourceSpan+declRefSourceSpan (TypeRef ss _ _) = ss+declRefSourceSpan (TypeOpRef ss _) = ss+declRefSourceSpan (ValueRef ss _) = ss+declRefSourceSpan (ValueOpRef ss _) = ss+declRefSourceSpan (TypeClassRef ss _) = ss+declRefSourceSpan (TypeInstanceRef ss _ _) = ss+declRefSourceSpan (ModuleRef ss _) = ss+declRefSourceSpan (ReExportRef ss _ _) = ss++declRefName :: DeclarationRef -> Name+declRefName (TypeRef _ n _) = TyName n+declRefName (TypeOpRef _ n) = TyOpName n+declRefName (ValueRef _ n) = IdentName n+declRefName (ValueOpRef _ n) = ValOpName n+declRefName (TypeClassRef _ n) = TyClassName n+declRefName (TypeInstanceRef _ n _) = IdentName n+declRefName (ModuleRef _ n) = ModName n+declRefName (ReExportRef _ _ ref) = declRefName ref++getTypeRef :: DeclarationRef -> Maybe (ProperName 'TypeName, Maybe [ProperName 'ConstructorName])+getTypeRef (TypeRef _ name dctors) = Just (name, dctors)+getTypeRef _ = Nothing++getTypeOpRef :: DeclarationRef -> Maybe (OpName 'TypeOpName)+getTypeOpRef (TypeOpRef _ op) = Just op+getTypeOpRef _ = Nothing++getValueRef :: DeclarationRef -> Maybe Ident+getValueRef (ValueRef _ name) = Just name+getValueRef _ = Nothing++getValueOpRef :: DeclarationRef -> Maybe (OpName 'ValueOpName)+getValueOpRef (ValueOpRef _ op) = Just op+getValueOpRef _ = Nothing++getTypeClassRef :: DeclarationRef -> Maybe (ProperName 'ClassName)+getTypeClassRef (TypeClassRef _ name) = Just name+getTypeClassRef _ = Nothing++isModuleRef :: DeclarationRef -> Bool+isModuleRef ModuleRef{} = True+isModuleRef _ = False++-- |+-- The data type which specifies type of import declaration+--+data ImportDeclarationType+  -- |+  -- An import with no explicit list: `import M`.+  --+  = Implicit+  -- |+  -- An import with an explicit list of references to import: `import M (foo)`+  --+  | Explicit [DeclarationRef]+  -- |+  -- An import with a list of references to hide: `import M hiding (foo)`+  --+  | Hiding [DeclarationRef]+  deriving (Eq, Show, Generic, Serialise)++isExplicit :: ImportDeclarationType -> Bool+isExplicit (Explicit _) = True+isExplicit _ = False++-- | A role declaration assigns a list of roles to a type constructor's+-- parameters, e.g.:+--+-- @type role T representational phantom@+--+-- In this example, @T@ is the identifier and @[representational, phantom]@ is+-- the list of roles (@T@ presumably having two parameters).+data RoleDeclarationData = RoleDeclarationData+  { rdeclSourceAnn :: !SourceAnn+  , rdeclIdent :: !(ProperName 'TypeName)+  , rdeclRoles :: ![Role]+  } deriving (Show, Eq)++-- | A type declaration assigns a type to an identifier, eg:+--+-- @identity :: forall a. a -> a@+--+-- In this example @identity@ is the identifier and @forall a. a -> a@ the type.+data TypeDeclarationData = TypeDeclarationData+  { tydeclSourceAnn :: !SourceAnn+  , tydeclIdent :: !Ident+  , tydeclType :: !SourceType+  } deriving (Show, Eq)++getTypeDeclaration :: Declaration -> Maybe TypeDeclarationData+getTypeDeclaration (TypeDeclaration d) = Just d+getTypeDeclaration _ = Nothing++unwrapTypeDeclaration :: TypeDeclarationData -> (Ident, SourceType)+unwrapTypeDeclaration td = (tydeclIdent td, tydeclType td)++-- | A value declaration assigns a name and potential binders, to an expression (or multiple guarded expressions).+--+-- @double x = x + x@+--+-- In this example @double@ is the identifier, @x@ is a binder and @x + x@ is the expression.+data ValueDeclarationData a = ValueDeclarationData+  { valdeclSourceAnn :: !SourceAnn+  , valdeclIdent :: !Ident+  -- ^ The declared value's name+  , valdeclName :: !NameKind+  -- ^ Whether or not this value is exported/visible+  , valdeclBinders :: ![Binder]+  , valdeclExpression :: !a+  } deriving (Show, Functor, Foldable, Traversable)++getValueDeclaration :: Declaration -> Maybe (ValueDeclarationData [GuardedExpr])+getValueDeclaration (ValueDeclaration d) = Just d+getValueDeclaration _ = Nothing++pattern ValueDecl :: SourceAnn -> Ident -> NameKind -> [Binder] -> [GuardedExpr] -> Declaration+pattern ValueDecl sann ident name binders expr+  = ValueDeclaration (ValueDeclarationData sann ident name binders expr)++data DataConstructorDeclaration = DataConstructorDeclaration+  { dataCtorAnn :: !SourceAnn+  , dataCtorName :: !(ProperName 'ConstructorName)+  , dataCtorFields :: ![(Ident, SourceType)]+  } deriving (Show, Eq)++mapDataCtorFields :: ([(Ident, SourceType)] -> [(Ident, SourceType)]) -> DataConstructorDeclaration -> DataConstructorDeclaration+mapDataCtorFields f DataConstructorDeclaration{..} = DataConstructorDeclaration { dataCtorFields = f dataCtorFields, .. }++traverseDataCtorFields :: Monad m => ([(Ident, SourceType)] -> m [(Ident, SourceType)]) -> DataConstructorDeclaration -> m DataConstructorDeclaration+traverseDataCtorFields f DataConstructorDeclaration{..} = DataConstructorDeclaration dataCtorAnn dataCtorName <$> f dataCtorFields++-- |+-- The data type of declarations+--+data Declaration+  -- |+  -- A data type declaration (data or newtype, name, arguments, data constructors)+  --+  = DataDeclaration SourceAnn DataDeclType (ProperName 'TypeName) [(Text, Maybe SourceType)] [DataConstructorDeclaration]+  -- |+  -- A minimal mutually recursive set of data type declarations+  --+  | DataBindingGroupDeclaration (NEL.NonEmpty Declaration)+  -- |+  -- A type synonym declaration (name, arguments, type)+  --+  | TypeSynonymDeclaration SourceAnn (ProperName 'TypeName) [(Text, Maybe SourceType)] SourceType+  -- |+  -- A kind signature declaration+  --+  | KindDeclaration SourceAnn KindSignatureFor (ProperName 'TypeName) SourceType+  -- |+  -- A role declaration (name, roles)+  --+  | RoleDeclaration {-# UNPACK #-} !RoleDeclarationData+  -- |+  -- A type declaration for a value (name, ty)+  --+  | TypeDeclaration {-# UNPACK #-} !TypeDeclarationData+  -- |+  -- A value declaration (name, top-level binders, optional guard, value)+  --+  | ValueDeclaration {-# UNPACK #-} !(ValueDeclarationData [GuardedExpr])+  -- |+  -- A declaration paired with pattern matching in let-in expression (binder, optional guard, value)+  | BoundValueDeclaration SourceAnn Binder Expr+  -- |+  -- A minimal mutually recursive set of value declarations+  --+  | BindingGroupDeclaration (NEL.NonEmpty ((SourceAnn, Ident), NameKind, Expr))+  -- |+  -- A foreign import declaration (name, type)+  --+  | ExternDeclaration SourceAnn Ident SourceType+  -- |+  -- A data type foreign import (name, kind)+  --+  | ExternDataDeclaration SourceAnn (ProperName 'TypeName) SourceType+  -- |+  -- A fixity declaration+  --+  | FixityDeclaration SourceAnn (Either ValueFixity TypeFixity)+  -- |+  -- A module import (module name, qualified/unqualified/hiding, optional "qualified as" name)+  --+  | ImportDeclaration SourceAnn ModuleName ImportDeclarationType (Maybe ModuleName)+  -- |+  -- A type class declaration (name, argument, implies, member declarations)+  --+  | TypeClassDeclaration SourceAnn (ProperName 'ClassName) [(Text, Maybe SourceType)] [SourceConstraint] [FunctionalDependency] [Declaration]+  -- |+  -- A type instance declaration (instance chain, chain index, name,+  -- dependencies, class name, instance types, member declarations)+  --+  | TypeInstanceDeclaration SourceAnn ChainId Integer (Either Text Ident) [SourceConstraint] (Qualified (ProperName 'ClassName)) [SourceType] TypeInstanceBody+  deriving (Show)++data ValueFixity = ValueFixity Fixity (Qualified (Either Ident (ProperName 'ConstructorName))) (OpName 'ValueOpName)+  deriving (Eq, Ord, Show)++data TypeFixity = TypeFixity Fixity (Qualified (ProperName 'TypeName)) (OpName 'TypeOpName)+  deriving (Eq, Ord, Show)++pattern ValueFixityDeclaration :: SourceAnn -> Fixity -> Qualified (Either Ident (ProperName 'ConstructorName)) -> OpName 'ValueOpName -> Declaration+pattern ValueFixityDeclaration sa fixity name op = FixityDeclaration sa (Left (ValueFixity fixity name op))++pattern TypeFixityDeclaration :: SourceAnn -> Fixity -> Qualified (ProperName 'TypeName) -> OpName 'TypeOpName -> Declaration+pattern TypeFixityDeclaration sa fixity name op = FixityDeclaration sa (Right (TypeFixity fixity name op))++-- | The members of a type class instance declaration+data TypeInstanceBody+  = DerivedInstance+  -- ^ This is a derived instance+  | NewtypeInstance+  -- ^ This is an instance derived from a newtype+  | NewtypeInstanceWithDictionary Expr+  -- ^ This is an instance derived from a newtype, desugared to include a+  -- dictionary for the type under the newtype.+  | ExplicitInstance [Declaration]+  -- ^ This is a regular (explicit) instance+  deriving (Show)++mapTypeInstanceBody :: ([Declaration] -> [Declaration]) -> TypeInstanceBody -> TypeInstanceBody+mapTypeInstanceBody f = runIdentity . traverseTypeInstanceBody (Identity . f)++-- | A traversal for TypeInstanceBody+traverseTypeInstanceBody :: (Applicative f) => ([Declaration] -> f [Declaration]) -> TypeInstanceBody -> f TypeInstanceBody+traverseTypeInstanceBody f (ExplicitInstance ds) = ExplicitInstance <$> f ds+traverseTypeInstanceBody _ other = pure other++-- | What sort of declaration the kind signature applies to.+data KindSignatureFor+  = DataSig+  | NewtypeSig+  | TypeSynonymSig+  | ClassSig+  deriving (Eq, Ord, Show, Generic)++instance NFData KindSignatureFor++declSourceAnn :: Declaration -> SourceAnn+declSourceAnn (DataDeclaration sa _ _ _ _) = sa+declSourceAnn (DataBindingGroupDeclaration ds) = declSourceAnn (NEL.head ds)+declSourceAnn (TypeSynonymDeclaration sa _ _ _) = sa+declSourceAnn (KindDeclaration sa _ _ _) = sa+declSourceAnn (RoleDeclaration rd) = rdeclSourceAnn rd+declSourceAnn (TypeDeclaration td) = tydeclSourceAnn td+declSourceAnn (ValueDeclaration vd) = valdeclSourceAnn vd+declSourceAnn (BoundValueDeclaration sa _ _) = sa+declSourceAnn (BindingGroupDeclaration ds) = let ((sa, _), _, _) = NEL.head ds in sa+declSourceAnn (ExternDeclaration sa _ _) = sa+declSourceAnn (ExternDataDeclaration sa _ _) = sa+declSourceAnn (FixityDeclaration sa _) = sa+declSourceAnn (ImportDeclaration sa _ _ _) = sa+declSourceAnn (TypeClassDeclaration sa _ _ _ _ _) = sa+declSourceAnn (TypeInstanceDeclaration sa _ _ _ _ _ _ _) = sa++declSourceSpan :: Declaration -> SourceSpan+declSourceSpan = fst . declSourceAnn++-- Note: Kind Declarations' names can refer to either a `TyClassName`+-- or a `TypeName`. Use a helper function for handling `KindDeclaration`s+-- specifically in the context in which it is needed.+declName :: Declaration -> Maybe Name+declName (DataDeclaration _ _ n _ _) = Just (TyName n)+declName (TypeSynonymDeclaration _ n _ _) = Just (TyName n)+declName (ValueDeclaration vd) = Just (IdentName (valdeclIdent vd))+declName (ExternDeclaration _ n _) = Just (IdentName n)+declName (ExternDataDeclaration _ n _) = Just (TyName n)+declName (FixityDeclaration _ (Left (ValueFixity _ _ n))) = Just (ValOpName n)+declName (FixityDeclaration _ (Right (TypeFixity _ _ n))) = Just (TyOpName n)+declName (TypeClassDeclaration _ n _ _ _ _) = Just (TyClassName n)+declName (TypeInstanceDeclaration _ _ _ n _ _ _ _) = IdentName <$> hush n+declName (RoleDeclaration RoleDeclarationData{..}) = Just (TyName rdeclIdent)+declName ImportDeclaration{} = Nothing+declName BindingGroupDeclaration{} = Nothing+declName DataBindingGroupDeclaration{} = Nothing+declName BoundValueDeclaration{} = Nothing+declName KindDeclaration{} = Nothing+declName TypeDeclaration{} = Nothing++-- |+-- Test if a declaration is a value declaration+--+isValueDecl :: Declaration -> Bool+isValueDecl ValueDeclaration{} = True+isValueDecl _ = False++-- |+-- Test if a declaration is a data type declaration+--+isDataDecl :: Declaration -> Bool+isDataDecl DataDeclaration{} = True+isDataDecl _ = False++-- |+-- Test if a declaration is a type synonym declaration+--+isTypeSynonymDecl :: Declaration -> Bool+isTypeSynonymDecl TypeSynonymDeclaration{} = True+isTypeSynonymDecl _ = False++-- |+-- Test if a declaration is a module import+--+isImportDecl :: Declaration -> Bool+isImportDecl ImportDeclaration{} = True+isImportDecl _ = False++-- |+-- Test if a declaration is a role declaration+--+isRoleDecl :: Declaration -> Bool+isRoleDecl RoleDeclaration{} = True+isRoleDecl _ = False++-- |+-- Test if a declaration is a data type foreign import+--+isExternDataDecl :: Declaration -> Bool+isExternDataDecl ExternDataDeclaration{} = True+isExternDataDecl _ = False++-- |+-- Test if a declaration is a fixity declaration+--+isFixityDecl :: Declaration -> Bool+isFixityDecl FixityDeclaration{} = True+isFixityDecl _ = False++getFixityDecl :: Declaration -> Maybe (Either ValueFixity TypeFixity)+getFixityDecl (FixityDeclaration _ fixity) = Just fixity+getFixityDecl _ = Nothing++-- |+-- Test if a declaration is a foreign import+--+isExternDecl :: Declaration -> Bool+isExternDecl ExternDeclaration{} = True+isExternDecl _ = False++-- |+-- Test if a declaration is a type class instance declaration+--+isTypeClassInstanceDecl :: Declaration -> Bool+isTypeClassInstanceDecl TypeInstanceDeclaration{} = True+isTypeClassInstanceDecl _ = False++-- |+-- Test if a declaration is a type class declaration+--+isTypeClassDecl :: Declaration -> Bool+isTypeClassDecl TypeClassDeclaration{} = True+isTypeClassDecl _ = False++-- |+-- Test if a declaration is a kind signature declaration.+--+isKindDecl :: Declaration -> Bool+isKindDecl KindDeclaration{} = True+isKindDecl _ = False++-- |+-- Recursively flatten data binding groups in the list of declarations+flattenDecls :: [Declaration] -> [Declaration]+flattenDecls = concatMap flattenOne+    where flattenOne :: Declaration -> [Declaration]+          flattenOne (DataBindingGroupDeclaration decls) = concatMap flattenOne decls+          flattenOne d = [d]++-- |+-- A guard is just a boolean-valued expression that appears alongside a set of binders+--+data Guard = ConditionGuard Expr+           | PatternGuard Binder Expr+           deriving (Show)++-- |+-- The right hand side of a binder in value declarations+-- and case expressions.+data GuardedExpr = GuardedExpr [Guard] Expr+                 deriving (Show)++pattern MkUnguarded :: Expr -> GuardedExpr+pattern MkUnguarded e = GuardedExpr [] e++-- |+-- Data type for expressions and terms+--+data Expr+  -- |+  -- A literal value+  --+  = Literal SourceSpan (Literal Expr)+  -- |+  -- A prefix -, will be desugared+  --+  | UnaryMinus SourceSpan Expr+  -- |+  -- Binary operator application. During the rebracketing phase of desugaring, this data constructor+  -- will be removed.+  --+  | BinaryNoParens Expr Expr Expr+  -- |+  -- Explicit parentheses. During the rebracketing phase of desugaring, this data constructor+  -- will be removed.+  --+  -- Note: although it seems this constructor is not used, it _is_ useful, since it prevents+  -- certain traversals from matching.+  --+  | Parens Expr+  -- |+  -- An record property accessor expression (e.g. `obj.x` or `_.x`).+  -- Anonymous arguments will be removed during desugaring and expanded+  -- into a lambda that reads a property from a record.+  --+  | Accessor PSString Expr+  -- |+  -- Partial record update+  --+  | ObjectUpdate Expr [(PSString, Expr)]+  -- |+  -- Object updates with nested support: `x { foo { bar = e } }`+  -- Replaced during desugaring into a `Let` and nested `ObjectUpdate`s+  --+  | ObjectUpdateNested Expr (PathTree Expr)+  -- |+  -- Function introduction+  --+  | Abs Binder Expr+  -- |+  -- Function application+  --+  | App Expr Expr+  -- |+  -- Hint that an expression is unused.+  -- This is used to ignore type class dictionaries that are necessarily empty.+  -- The inner expression lets us solve subgoals before eliminating the whole expression.+  -- The code gen will render this as `undefined`, regardless of what the inner expression is.+  | Unused Expr+  -- |+  -- Variable+  --+  | Var SourceSpan (Qualified Ident)+  -- |+  -- An operator. This will be desugared into a function during the "operators"+  -- phase of desugaring.+  --+  | Op SourceSpan (Qualified (OpName 'ValueOpName))+  -- |+  -- Conditional (if-then-else expression)+  --+  | IfThenElse Expr Expr Expr+  -- |+  -- A data constructor+  --+  | Constructor SourceSpan (Qualified (ProperName 'ConstructorName))+  -- |+  -- A case expression. During the case expansion phase of desugaring, top-level binders will get+  -- desugared into case expressions, hence the need for guards and multiple binders per branch here.+  --+  | Case [Expr] [CaseAlternative]+  -- |+  -- A value with a type annotation+  --+  | TypedValue Bool Expr SourceType+  -- |+  -- A let binding+  --+  | Let WhereProvenance [Declaration] Expr+  -- |+  -- A do-notation block+  --+  | Do (Maybe ModuleName) [DoNotationElement]+  -- |+  -- An ado-notation block+  --+  | Ado (Maybe ModuleName) [DoNotationElement] Expr+  -- |+  -- A placeholder for a type class dictionary to be inserted later. At the end of type checking, these+  -- placeholders will be replaced with actual expressions representing type classes dictionaries which+  -- can be evaluated at runtime. The constructor arguments represent (in order): whether or not to look+  -- at superclass implementations when searching for a dictionary, the type class name and+  -- instance type, and the type class dictionaries in scope.+  --+  | TypeClassDictionary SourceConstraint+                        (M.Map (Maybe ModuleName) (M.Map (Qualified (ProperName 'ClassName)) (M.Map (Qualified Ident) (NEL.NonEmpty NamedDict))))+                        [ErrorMessageHint]+  -- |+  -- A placeholder for a superclass dictionary to be turned into a TypeClassDictionary during typechecking+  --+  | DeferredDictionary (Qualified (ProperName 'ClassName)) [SourceType]+  -- |+  -- A placeholder for an anonymous function argument+  --+  | AnonymousArgument+  -- |+  -- A typed hole that will be turned into a hint/error during typechecking+  --+  | Hole Text+  -- |+  -- A value with source position information+  --+  | PositionedValue SourceSpan [Comment] Expr+  deriving (Show)++-- |+-- Metadata that tells where a let binding originated+--+data WhereProvenance+  -- |+  -- The let binding was originally a where clause+  --+  = FromWhere+  -- |+  -- The let binding was always a let binding+  --+  | FromLet+  deriving (Show)++-- |+-- An alternative in a case statement+--+data CaseAlternative = CaseAlternative+  { -- |+    -- A collection of binders with which to match the inputs+    --+    caseAlternativeBinders :: [Binder]+    -- |+    -- The result expression or a collect of guarded expressions+    --+  , caseAlternativeResult :: [GuardedExpr]+  } deriving (Show)++-- |+-- A statement in a do-notation block+--+data DoNotationElement+  -- |+  -- A monadic value without a binder+  --+  = DoNotationValue Expr+  -- |+  -- A monadic value with a binder+  --+  | DoNotationBind Binder Expr+  -- |+  -- A let statement, i.e. a pure value with a binder+  --+  | DoNotationLet [Declaration]+  -- |+  -- A do notation element with source position information+  --+  | PositionedDoNotationElement SourceSpan [Comment] DoNotationElement+  deriving (Show)+++-- For a record update such as:+--+--  x { foo = 0+--    , bar { baz = 1+--          , qux = 2 } }+--+-- We represent the updates as the `PathTree`:+--+--  [ ("foo", Leaf 3)+--  , ("bar", Branch [ ("baz", Leaf 1)+--                   , ("qux", Leaf 2) ]) ]+--+-- Which we then convert to an expression representing the following:+--+--   let x' = x+--   in x' { foo = 0+--         , bar = x'.bar { baz = 1+--                        , qux = 2 } }+--+-- The `let` here is required to prevent re-evaluating the object expression `x`.+-- However we don't generate this when using an anonymous argument for the object.+--++newtype PathTree t = PathTree (AssocList PSString (PathNode t))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable)++data PathNode t = Leaf t | Branch (PathTree t)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable)++newtype AssocList k t = AssocList { runAssocList :: [(k, t)] }+  deriving (Show, Eq, Ord, Foldable, Functor, Traversable)++$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''NameSource)+$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''DeclarationRef)+$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''ImportDeclarationType)+$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''ExportSource)++isTrueExpr :: Expr -> Bool+isTrueExpr (Literal _ (BooleanLiteral True)) = True+isTrueExpr (Var _ (Qualified (Just (ModuleName "Prelude")) (Ident "otherwise"))) = True+isTrueExpr (Var _ (Qualified (Just (ModuleName "Data.Boolean")) (Ident "otherwise"))) = True+isTrueExpr (TypedValue _ e _) = isTrueExpr e+isTrueExpr (PositionedValue _ _ e) = isTrueExpr e+isTrueExpr _ = False++isAnonymousArgument :: Expr -> Bool+isAnonymousArgument AnonymousArgument = True+isAnonymousArgument (PositionedValue _ _ e) = isAnonymousArgument e+isAnonymousArgument _ = False
+ src/Language/PureScript/AST/Declarations/ChainId.hs view
@@ -0,0 +1,20 @@+module Language.PureScript.AST.Declarations.ChainId+  ( ChainId+  , mkChainId+  ) where++import Prelude+import qualified Language.PureScript.AST.SourcePos as Pos+import Control.DeepSeq (NFData)+import Codec.Serialise (Serialise)++-- |+-- For a given instance chain, stores the chain's file name and+-- the starting source pos of the first instance in the chain.+-- This data is used to determine which instances are part of+-- the same instance chain.+newtype ChainId = ChainId (String, Pos.SourcePos)+  deriving (Eq, Ord, Show, NFData, Serialise)++mkChainId :: String -> Pos.SourcePos -> ChainId+mkChainId fileName startingSourcePos = ChainId (fileName, startingSourcePos)
+ src/Language/PureScript/AST/Exported.hs view
@@ -0,0 +1,173 @@+module Language.PureScript.AST.Exported+  ( exportedDeclarations+  , isExported+  ) where++import Prelude.Compat+import Protolude (sortOn)++import Control.Category ((>>>))+import Control.Applicative ((<|>))++import Data.Maybe (mapMaybe)+import qualified Data.Map as M++import Language.PureScript.AST.Declarations+import Language.PureScript.Types+import Language.PureScript.Names++-- |+-- Return a list of all declarations which are exported from a module.+-- This function descends into data declarations to filter out unexported+-- data constructors, and also filters out type instance declarations if+-- they refer to classes or types which are not themselves exported.+--+-- Note that this function assumes that the module has already had its imports+-- desugared using 'Language.PureScript.Sugar.Names.desugarImports'. It will+-- produce incorrect results if this is not the case - for example, type class+-- instances will be incorrectly removed in some cases.+--+-- The returned declarations are in the same order as they appear in the export+-- list, unless there is no export list, in which case they appear in the same+-- order as they do in the source file.+--+-- Kind signatures declarations are also exported if their associated+-- declaration is exported.+exportedDeclarations :: Module -> [Declaration]+exportedDeclarations (Module _ _ mn decls exps) = go decls+  where+  go = flattenDecls+        >>> filter (isExported exps)+        >>> map (filterDataConstructors exps)+        >>> filterInstances mn exps+        >>> maybe id reorder exps++-- |+-- Filter out all data constructors from a declaration which are not exported.+-- If the supplied declaration is not a data declaration, this function returns+-- it unchanged.+--+filterDataConstructors :: Maybe [DeclarationRef] -> Declaration -> Declaration+filterDataConstructors exps (DataDeclaration sa dType tyName tyArgs dctors) =+  DataDeclaration sa dType tyName tyArgs $+    filter (isDctorExported tyName exps . dataCtorName) dctors+filterDataConstructors _ other = other++-- |+-- Filter out all the type instances from a list of declarations which+-- reference a type or type class which is both local and not exported.+--+-- Note that this function assumes that the module has already had its imports+-- desugared using "Language.PureScript.Sugar.Names.desugarImports". It will+-- produce incorrect results if this is not the case - for example, type class+-- instances will be incorrectly removed in some cases.+--+filterInstances+  :: ModuleName+  -> Maybe [DeclarationRef]+  -> [Declaration]+  -> [Declaration]+filterInstances _ Nothing = id+filterInstances mn (Just exps) =+  let refs = Left `map` mapMaybe typeClassName exps+          ++ Right `map` mapMaybe typeName exps+  in filter (all (visibleOutside refs) . typeInstanceConstituents)+  where+  -- Given a Qualified ProperName, and a list of all exported types and type+  -- classes, returns whether the supplied Qualified ProperName is visible+  -- outside this module. This is true if one of the following hold:+  --+  --  * the name is defined in the same module and is exported,+  --  * the name is defined in a different module (and must be exported from+  --    that module; the code would fail to compile otherwise).+  visibleOutside+    :: [Either (ProperName 'ClassName) (ProperName 'TypeName)]+    -> Either (Qualified (ProperName 'ClassName)) (Qualified (ProperName 'TypeName))+    -> Bool+  visibleOutside refs q+    | either checkQual checkQual q = True+    | otherwise = either (Left . disqualify) (Right . disqualify) q `elem` refs++  -- Check that a qualified name is qualified for a different module+  checkQual :: Qualified a -> Bool+  checkQual q = isQualified q && not (isQualifiedWith mn q)++  typeName :: DeclarationRef -> Maybe (ProperName 'TypeName)+  typeName (TypeRef _ n _) = Just n+  typeName _ = Nothing++  typeClassName :: DeclarationRef -> Maybe (ProperName 'ClassName)+  typeClassName (TypeClassRef _ n) = Just n+  typeClassName _ = Nothing++-- |+-- Get all type and type class names referenced by a type instance declaration.+--+typeInstanceConstituents :: Declaration -> [Either (Qualified (ProperName 'ClassName)) (Qualified (ProperName 'TypeName))]+typeInstanceConstituents (TypeInstanceDeclaration _ _ _ _ constraints className tys _) =+  Left className : (concatMap fromConstraint constraints ++ concatMap fromType tys)+  where++  fromConstraint c = Left (constraintClass c) : concatMap fromType (constraintArgs c)+  fromType = everythingOnTypes (++) go++  -- Note that type synonyms are disallowed in instance declarations, so+  -- we don't need to handle them here.+  go (TypeConstructor _ n) = [Right n]+  go (ConstrainedType _ c _) = fromConstraint c+  go _ = []++typeInstanceConstituents _ = []+++-- |+-- Test if a declaration is exported, given a module's export list. Note that+-- this function does not account for type instance declarations of+-- non-exported types, or non-exported data constructors. Therefore, you should+-- prefer 'exportedDeclarations' to this function, where possible.+--+isExported :: Maybe [DeclarationRef] -> Declaration -> Bool+isExported Nothing _ = True+isExported _ TypeInstanceDeclaration{} = True+isExported (Just exps) (KindDeclaration _ _ n _) = any matches exps+  where+  matches declRef = do+    let refName = declRefName declRef+    TyName n == refName || TyClassName (tyToClassName n) == refName+isExported (Just exps) decl = any matches exps+  where+  matches declRef = declName decl == Just (declRefName declRef)++-- |+-- Test if a data constructor for a given type is exported, given a module's+-- export list. Prefer 'exportedDeclarations' to this function, where possible.+--+isDctorExported :: ProperName 'TypeName -> Maybe [DeclarationRef] -> ProperName 'ConstructorName -> Bool+isDctorExported _ Nothing _ = True+isDctorExported ident (Just exps) ctor = test `any` exps+  where+  test (TypeRef _ ident' Nothing) = ident == ident'+  test (TypeRef _ ident' (Just ctors)) = ident == ident' && ctor `elem` ctors+  test _ = False++-- |+-- Reorder declarations based on the order they appear in the given export+-- list.+--+reorder :: [DeclarationRef] -> [Declaration] -> [Declaration]+reorder refs =+  sortOn refIndex+  where+  refIndices =+    M.fromList $ zip (map declRefName refs) [(0::Int)..]+  refIndex = \case+    KindDeclaration _ _ n _ ->+      M.lookup (TyName n) refIndices <|> M.lookup (TyClassName (tyToClassName n)) refIndices++    decl -> declName decl >>= flip M.lookup refIndices++-- |+-- Workaround to the fact that a `KindDeclaration`'s name's `ProperNameType`+-- isn't the same as the corresponding `TypeClassDeclaration`'s `ProperNameType`+tyToClassName :: ProperName 'TypeName -> ProperName 'ClassName+tyToClassName = coerceProperName
+ src/Language/PureScript/AST/Literals.hs view
@@ -0,0 +1,38 @@+-- |+-- The core functional representation for literal values.+--+module Language.PureScript.AST.Literals where++import Prelude.Compat+import Language.PureScript.PSString (PSString)++-- |+-- Data type for literal values. Parameterised so it can be used for Exprs and+-- Binders.+--+data Literal a+  -- |+  -- A numeric literal+  --+  = NumericLiteral (Either Integer Double)+  -- |+  -- A string literal+  --+  | StringLiteral PSString+  -- |+  -- A character literal+  --+  | CharLiteral Char+  -- |+  -- A boolean literal+  --+  | BooleanLiteral Bool+  -- |+  -- An array literal+  --+  | ArrayLiteral [a]+  -- |+  -- An object literal+  --+  | ObjectLiteral [(PSString, a)]+  deriving (Eq, Ord, Show, Functor)
+ src/Language/PureScript/AST/Operators.hs view
@@ -0,0 +1,60 @@+-- |+-- Operators fixity and associativity+--+module Language.PureScript.AST.Operators where++import Prelude.Compat++import Codec.Serialise (Serialise)+import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Aeson ((.=))+import qualified Data.Aeson as A++import Language.PureScript.Crash++-- |+-- A precedence level for an infix operator+--+type Precedence = Integer++-- |+-- Associativity for infix operators+--+data Associativity = Infixl | Infixr | Infix+  deriving (Show, Eq, Ord, Generic)++instance NFData Associativity+instance Serialise Associativity++showAssoc :: Associativity -> String+showAssoc Infixl = "infixl"+showAssoc Infixr = "infixr"+showAssoc Infix  = "infix"++readAssoc :: String -> Associativity+readAssoc "infixl" = Infixl+readAssoc "infixr" = Infixr+readAssoc "infix"  = Infix+readAssoc _ = internalError "readAssoc: no parse"++instance A.ToJSON Associativity where+  toJSON = A.toJSON . showAssoc++instance A.FromJSON Associativity where+  parseJSON = fmap readAssoc . A.parseJSON++-- |+-- Fixity data for infix operators+--+data Fixity = Fixity Associativity Precedence+  deriving (Show, Eq, Ord, Generic)++instance NFData Fixity+instance Serialise Fixity++instance A.ToJSON Fixity where+  toJSON (Fixity associativity precedence) =+    A.object [ "associativity" .= associativity+             , "precedence" .= precedence+             ]
+ src/Language/PureScript/AST/SourcePos.hs view
@@ -0,0 +1,118 @@+{-# LANGUAGE DeriveAnyClass #-}+-- |+-- Source position information+--+module Language.PureScript.AST.SourcePos where++import Prelude.Compat++import Codec.Serialise (Serialise)+import Control.DeepSeq (NFData)+import Data.Aeson ((.=), (.:))+import Data.Text (Text)+import GHC.Generics (Generic)+import Language.PureScript.Comments+import qualified Data.Aeson as A+import qualified Data.Text as T+import System.FilePath (makeRelative)++-- | Source annotation - position information and comments.+type SourceAnn = (SourceSpan, [Comment])++-- | Source position information+data SourcePos = SourcePos+  { sourcePosLine :: Int+    -- ^ Line number+  , sourcePosColumn :: Int+    -- ^ Column number+  } deriving (Show, Eq, Ord, Generic, NFData, Serialise)++displaySourcePos :: SourcePos -> Text+displaySourcePos sp =+  "line " <> T.pack (show (sourcePosLine sp)) <>+    ", column " <> T.pack (show (sourcePosColumn sp))++displaySourcePosShort :: SourcePos -> Text+displaySourcePosShort sp =+  T.pack (show (sourcePosLine sp)) <>+    ":" <> T.pack (show (sourcePosColumn sp))++instance A.ToJSON SourcePos where+  toJSON SourcePos{..} =+    A.toJSON [sourcePosLine, sourcePosColumn]++instance A.FromJSON SourcePos where+  parseJSON arr = do+    [line, col] <- A.parseJSON arr+    return $ SourcePos line col++data SourceSpan = SourceSpan+  { spanName :: String+    -- ^ Source name+  , spanStart :: SourcePos+    -- ^ Start of the span+  , spanEnd :: SourcePos+    -- ^ End of the span+  } deriving (Show, Eq, Ord, Generic, NFData, Serialise)++displayStartEndPos :: SourceSpan -> Text+displayStartEndPos sp =+  "(" <>+  displaySourcePos (spanStart sp) <> " - " <>+  displaySourcePos (spanEnd sp) <> ")"++displayStartEndPosShort :: SourceSpan -> Text+displayStartEndPosShort sp =+  displaySourcePosShort (spanStart sp) <> " - " <>+  displaySourcePosShort (spanEnd sp)++displaySourceSpan :: FilePath -> SourceSpan -> Text+displaySourceSpan relPath sp =+  T.pack (makeRelative relPath (spanName sp)) <> ":" <>+    displayStartEndPosShort sp <> " " <>+    displayStartEndPos sp++instance A.ToJSON SourceSpan where+  toJSON SourceSpan{..} =+    A.object [ "name"  .= spanName+             , "start" .= spanStart+             , "end"   .= spanEnd+             ]++instance A.FromJSON SourceSpan where+  parseJSON = A.withObject "SourceSpan" $ \o ->+    SourceSpan     <$>+      o .: "name"  <*>+      o .: "start" <*>+      o .: "end"++internalModuleSourceSpan :: String -> SourceSpan+internalModuleSourceSpan name = SourceSpan name (SourcePos 0 0) (SourcePos 0 0)++nullSourceSpan :: SourceSpan+nullSourceSpan = internalModuleSourceSpan ""++nullSourceAnn :: SourceAnn+nullSourceAnn = (nullSourceSpan, [])++pattern NullSourceSpan :: SourceSpan+pattern NullSourceSpan = SourceSpan "" (SourcePos 0 0) (SourcePos 0 0)++pattern NullSourceAnn :: SourceAnn+pattern NullSourceAnn = (NullSourceSpan, [])++nonEmptySpan :: SourceAnn -> Maybe SourceSpan+nonEmptySpan (NullSourceSpan, _) = Nothing+nonEmptySpan (ss, _) = Just ss++widenSourceSpan :: SourceSpan -> SourceSpan -> SourceSpan+widenSourceSpan NullSourceSpan b = b+widenSourceSpan a NullSourceSpan = a+widenSourceSpan (SourceSpan n1 s1 e1) (SourceSpan n2 s2 e2) =+  SourceSpan n (min s1 s2) (max e1 e2)+  where+  n | n1 == ""  = n2+    | otherwise = n1++widenSourceAnn :: SourceAnn -> SourceAnn -> SourceAnn+widenSourceAnn (s1, _) (s2, _) = (widenSourceSpan s1 s2, [])
+ src/Language/PureScript/AST/Traversals.hs view
@@ -0,0 +1,694 @@+-- |+-- AST traversal helpers+--+module Language.PureScript.AST.Traversals where++import Prelude.Compat++import Control.Monad++import Data.Foldable (fold)+import Data.Functor.Identity (runIdentity)+import Data.List (mapAccumL)+import Data.Maybe (mapMaybe)+import qualified Data.List.NonEmpty as NEL+import qualified Data.Map as M+import qualified Data.Set as S++import Language.PureScript.AST.Binders+import Language.PureScript.AST.Declarations+import Language.PureScript.AST.Literals+import Language.PureScript.Names+import Language.PureScript.Traversals+import Language.PureScript.TypeClassDictionaries (TypeClassDictionaryInScope(..))+import Language.PureScript.Types++guardedExprM :: Applicative m+             => (Guard -> m Guard)+             -> (Expr -> m Expr)+             -> GuardedExpr+             -> m GuardedExpr+guardedExprM f g (GuardedExpr guards rhs) =+  GuardedExpr <$> traverse f guards <*> g rhs++mapGuardedExpr :: (Guard -> Guard)+               -> (Expr -> Expr)+               -> GuardedExpr+               -> GuardedExpr+mapGuardedExpr f g (GuardedExpr guards rhs) =+  GuardedExpr (fmap f guards) (g rhs)++litM :: Monad m => (a -> m a) -> Literal a -> m (Literal a)+litM go (ObjectLiteral as) = ObjectLiteral <$> traverse (sndM go) as+litM go (ArrayLiteral as) = ArrayLiteral <$> traverse go as+litM _ other = pure other++everywhereOnValues+  :: (Declaration -> Declaration)+  -> (Expr -> Expr)+  -> (Binder -> Binder)+  -> ( Declaration -> Declaration+     , Expr -> Expr+     , Binder -> Binder+     )+everywhereOnValues f g h = (f', g', h')+  where+  f' :: Declaration -> Declaration+  f' (DataBindingGroupDeclaration ds) = f (DataBindingGroupDeclaration (fmap f' ds))+  f' (ValueDecl sa name nameKind bs val) =+     f (ValueDecl sa name nameKind (fmap h' bs) (fmap (mapGuardedExpr handleGuard g') val))+  f' (BoundValueDeclaration sa b expr) = f (BoundValueDeclaration sa (h' b) (g' expr))+  f' (BindingGroupDeclaration ds) = f (BindingGroupDeclaration (fmap (\(name, nameKind, val) -> (name, nameKind, g' val)) ds))+  f' (TypeClassDeclaration sa name args implies deps ds) = f (TypeClassDeclaration sa name args implies deps (fmap f' ds))+  f' (TypeInstanceDeclaration sa ch idx name cs className args ds) = f (TypeInstanceDeclaration sa ch idx name cs className args (mapTypeInstanceBody (fmap f') ds))+  f' other = f other++  g' :: Expr -> Expr+  g' (Literal ss l) = g (Literal ss (lit g' l))+  g' (UnaryMinus ss v) = g (UnaryMinus ss (g' v))+  g' (BinaryNoParens op v1 v2) = g (BinaryNoParens (g' op) (g' v1) (g' v2))+  g' (Parens v) = g (Parens (g' v))+  g' (Accessor prop v) = g (Accessor prop (g' v))+  g' (ObjectUpdate obj vs) = g (ObjectUpdate (g' obj) (fmap (fmap g') vs))+  g' (ObjectUpdateNested obj vs) = g (ObjectUpdateNested (g' obj) (fmap g' vs))+  g' (Abs binder v) = g (Abs (h' binder) (g' v))+  g' (App v1 v2) = g (App (g' v1) (g' v2))+  g' (Unused v) = g (Unused (g' v))+  g' (IfThenElse v1 v2 v3) = g (IfThenElse (g' v1) (g' v2) (g' v3))+  g' (Case vs alts) = g (Case (fmap g' vs) (fmap handleCaseAlternative alts))+  g' (TypedValue check v ty) = g (TypedValue check (g' v) ty)+  g' (Let w ds v) = g (Let w (fmap f' ds) (g' v))+  g' (Do m es) = g (Do m (fmap handleDoNotationElement es))+  g' (Ado m es v) = g (Ado m (fmap handleDoNotationElement es) (g' v))+  g' (PositionedValue pos com v) = g (PositionedValue pos com (g' v))+  g' other = g other++  h' :: Binder -> Binder+  h' (ConstructorBinder ss ctor bs) = h (ConstructorBinder ss ctor (fmap h' bs))+  h' (BinaryNoParensBinder b1 b2 b3) = h (BinaryNoParensBinder (h' b1) (h' b2) (h' b3))+  h' (ParensInBinder b) = h (ParensInBinder (h' b))+  h' (LiteralBinder ss l) = h (LiteralBinder ss (lit h' l))+  h' (NamedBinder ss name b) = h (NamedBinder ss name (h' b))+  h' (PositionedBinder pos com b) = h (PositionedBinder pos com (h' b))+  h' (TypedBinder t b) = h (TypedBinder t (h' b))+  h' other = h other++  lit :: (a -> a) -> Literal a -> Literal a+  lit go (ArrayLiteral as) = ArrayLiteral (fmap go as)+  lit go (ObjectLiteral as) = ObjectLiteral (fmap (fmap go) as)+  lit _ other = other++  handleCaseAlternative :: CaseAlternative -> CaseAlternative+  handleCaseAlternative ca =+    ca { caseAlternativeBinders = fmap h' (caseAlternativeBinders ca)+       , caseAlternativeResult = fmap (mapGuardedExpr handleGuard g') (caseAlternativeResult ca)+       }++  handleDoNotationElement :: DoNotationElement -> DoNotationElement+  handleDoNotationElement (DoNotationValue v) = DoNotationValue (g' v)+  handleDoNotationElement (DoNotationBind b v) = DoNotationBind (h' b) (g' v)+  handleDoNotationElement (DoNotationLet ds) = DoNotationLet (fmap f' ds)+  handleDoNotationElement (PositionedDoNotationElement pos com e) = PositionedDoNotationElement pos com (handleDoNotationElement e)++  handleGuard :: Guard -> Guard+  handleGuard (ConditionGuard e) = ConditionGuard (g' e)+  handleGuard (PatternGuard b e) = PatternGuard (h' b) (g' e)++everywhereOnValuesTopDownM+  :: forall m+   . (Monad m)+  => (Declaration -> m Declaration)+  -> (Expr -> m Expr)+  -> (Binder -> m Binder)+  -> ( Declaration -> m Declaration+     , Expr -> m Expr+     , Binder -> m Binder+     )+everywhereOnValuesTopDownM f g h = (f' <=< f, g' <=< g, h' <=< h)+  where++  f' :: Declaration -> m Declaration+  f' (DataBindingGroupDeclaration ds) = DataBindingGroupDeclaration <$> traverse (f' <=< f) ds+  f' (ValueDecl sa name nameKind bs val) =+     ValueDecl sa name nameKind <$> traverse (h' <=< h) bs <*> traverse (guardedExprM handleGuard (g' <=< g)) val+  f' (BindingGroupDeclaration ds) = BindingGroupDeclaration <$> traverse (\(name, nameKind, val) -> (name, nameKind, ) <$> (g val >>= g')) ds+  f' (TypeClassDeclaration sa name args implies deps ds) = TypeClassDeclaration sa name args implies deps <$> traverse (f' <=< f) ds+  f' (TypeInstanceDeclaration sa ch idx name cs className args ds) = TypeInstanceDeclaration sa ch idx name cs className args <$> traverseTypeInstanceBody (traverse (f' <=< f)) ds+  f' (BoundValueDeclaration sa b expr) = BoundValueDeclaration sa <$> (h' <=< h) b <*> (g' <=< g) expr+  f' other = f other++  g' :: Expr -> m Expr+  g' (Literal ss l) = Literal ss <$> litM (g >=> g') l+  g' (UnaryMinus ss v) = UnaryMinus ss <$> (g v >>= g')+  g' (BinaryNoParens op v1 v2) = BinaryNoParens <$> (g op >>= g') <*> (g v1 >>= g') <*> (g v2 >>= g')+  g' (Parens v) = Parens <$> (g v >>= g')+  g' (Accessor prop v) = Accessor prop <$> (g v >>= g')+  g' (ObjectUpdate obj vs) = ObjectUpdate <$> (g obj >>= g') <*> traverse (sndM (g' <=< g)) vs+  g' (ObjectUpdateNested obj vs) = ObjectUpdateNested <$> (g obj >>= g') <*> traverse (g' <=< g) vs+  g' (Abs binder v) = Abs <$> (h binder >>= h') <*> (g v >>= g')+  g' (App v1 v2) = App <$> (g v1 >>= g') <*> (g v2 >>= g')+  g' (Unused v) = Unused <$> (g v >>= g')+  g' (IfThenElse v1 v2 v3) = IfThenElse <$> (g v1 >>= g') <*> (g v2 >>= g') <*> (g v3 >>= g')+  g' (Case vs alts) = Case <$> traverse (g' <=< g) vs <*> traverse handleCaseAlternative alts+  g' (TypedValue check v ty) = TypedValue check <$> (g v >>= g') <*> pure ty+  g' (Let w ds v) = Let w <$> traverse (f' <=< f) ds <*> (g v >>= g')+  g' (Do m es) = Do m <$> traverse handleDoNotationElement es+  g' (Ado m es v) = Ado m <$> traverse handleDoNotationElement es <*> (g v >>= g')+  g' (PositionedValue pos com v) = PositionedValue pos com <$> (g v >>= g')+  g' other = g other++  h' :: Binder -> m Binder+  h' (LiteralBinder ss l) = LiteralBinder ss <$> litM (h >=> h') l+  h' (ConstructorBinder ss ctor bs) = ConstructorBinder ss ctor <$> traverse (h' <=< h) bs+  h' (BinaryNoParensBinder b1 b2 b3) = BinaryNoParensBinder <$> (h b1 >>= h') <*> (h b2 >>= h') <*> (h b3 >>= h')+  h' (ParensInBinder b) = ParensInBinder <$> (h b >>= h')+  h' (NamedBinder ss name b) = NamedBinder ss name <$> (h b >>= h')+  h' (PositionedBinder pos com b) = PositionedBinder pos com <$> (h b >>= h')+  h' (TypedBinder t b) = TypedBinder t <$> (h b >>= h')+  h' other = h other++  handleCaseAlternative :: CaseAlternative -> m CaseAlternative+  handleCaseAlternative (CaseAlternative bs val) =+    CaseAlternative+      <$> traverse (h' <=< h) bs+      <*> traverse (guardedExprM handleGuard (g' <=< g)) val++  handleDoNotationElement :: DoNotationElement -> m DoNotationElement+  handleDoNotationElement (DoNotationValue v) = DoNotationValue <$> (g' <=< g) v+  handleDoNotationElement (DoNotationBind b v) = DoNotationBind <$> (h' <=< h) b <*> (g' <=< g) v+  handleDoNotationElement (DoNotationLet ds) = DoNotationLet <$> traverse (f' <=< f) ds+  handleDoNotationElement (PositionedDoNotationElement pos com e) = PositionedDoNotationElement pos com <$> handleDoNotationElement e++  handleGuard :: Guard -> m Guard+  handleGuard (ConditionGuard e) = ConditionGuard <$> (g' <=< g) e+  handleGuard (PatternGuard b e) = PatternGuard <$> (h' <=< h) b <*> (g' <=< g) e++everywhereOnValuesM+  :: forall m+   . (Monad m)+  => (Declaration -> m Declaration)+  -> (Expr -> m Expr)+  -> (Binder -> m Binder)+  -> ( Declaration -> m Declaration+     , Expr -> m Expr+     , Binder -> m Binder+     )+everywhereOnValuesM f g h = (f', g', h')+  where++  f' :: Declaration -> m Declaration+  f' (DataBindingGroupDeclaration ds) = (DataBindingGroupDeclaration <$> traverse f' ds) >>= f+  f' (ValueDecl sa name nameKind bs val) =+    ValueDecl sa name nameKind <$> traverse h' bs <*> traverse (guardedExprM handleGuard g') val >>= f+  f' (BindingGroupDeclaration ds) = (BindingGroupDeclaration <$> traverse (\(name, nameKind, val) -> (name, nameKind, ) <$> g' val) ds) >>= f+  f' (BoundValueDeclaration sa b expr) = (BoundValueDeclaration sa <$> h' b <*> g' expr) >>= f+  f' (TypeClassDeclaration sa name args implies deps ds) = (TypeClassDeclaration sa name args implies deps <$> traverse f' ds) >>= f+  f' (TypeInstanceDeclaration sa ch idx name cs className args ds) = (TypeInstanceDeclaration sa ch idx name cs className args <$> traverseTypeInstanceBody (traverse f') ds) >>= f+  f' other = f other++  g' :: Expr -> m Expr+  g' (Literal ss l) = (Literal ss <$> litM g' l) >>= g+  g' (UnaryMinus ss v) = (UnaryMinus ss <$> g' v) >>= g+  g' (BinaryNoParens op v1 v2) = (BinaryNoParens <$> g' op <*> g' v1 <*> g' v2) >>= g+  g' (Parens v) = (Parens <$> g' v) >>= g+  g' (Accessor prop v) = (Accessor prop <$> g' v) >>= g+  g' (ObjectUpdate obj vs) = (ObjectUpdate <$> g' obj <*> traverse (sndM g') vs) >>= g+  g' (ObjectUpdateNested obj vs) = (ObjectUpdateNested <$> g' obj <*> traverse g' vs) >>= g+  g' (Abs binder v) = (Abs <$> h' binder <*> g' v) >>= g+  g' (App v1 v2) = (App <$> g' v1 <*> g' v2) >>= g+  g' (Unused v) = (Unused <$> g' v) >>= g+  g' (IfThenElse v1 v2 v3) = (IfThenElse <$> g' v1 <*> g' v2 <*> g' v3) >>= g+  g' (Case vs alts) = (Case <$> traverse g' vs <*> traverse handleCaseAlternative alts) >>= g+  g' (TypedValue check v ty) = (TypedValue check <$> g' v <*> pure ty) >>= g+  g' (Let w ds v) = (Let w <$> traverse f' ds <*> g' v) >>= g+  g' (Do m es) = (Do m <$> traverse handleDoNotationElement es) >>= g+  g' (Ado m es v) = (Ado m <$> traverse handleDoNotationElement es <*> g' v) >>= g+  g' (PositionedValue pos com v) = (PositionedValue pos com <$> g' v) >>= g+  g' other = g other++  h' :: Binder -> m Binder+  h' (LiteralBinder ss l) = (LiteralBinder ss <$> litM h' l) >>= h+  h' (ConstructorBinder ss ctor bs) = (ConstructorBinder ss ctor <$> traverse h' bs) >>= h+  h' (BinaryNoParensBinder b1 b2 b3) = (BinaryNoParensBinder <$> h' b1 <*> h' b2 <*> h' b3) >>= h+  h' (ParensInBinder b) = (ParensInBinder <$> h' b) >>= h+  h' (NamedBinder ss name b) = (NamedBinder ss name <$> h' b) >>= h+  h' (PositionedBinder pos com b) = (PositionedBinder pos com <$> h' b) >>= h+  h' (TypedBinder t b) = (TypedBinder t <$> h' b) >>= h+  h' other = h other++  handleCaseAlternative :: CaseAlternative -> m CaseAlternative+  handleCaseAlternative (CaseAlternative bs val) =+    CaseAlternative+      <$> traverse h' bs+      <*> traverse (guardedExprM handleGuard g') val++  handleDoNotationElement :: DoNotationElement -> m DoNotationElement+  handleDoNotationElement (DoNotationValue v) = DoNotationValue <$> g' v+  handleDoNotationElement (DoNotationBind b v) = DoNotationBind <$> h' b <*> g' v+  handleDoNotationElement (DoNotationLet ds) = DoNotationLet <$> traverse f' ds+  handleDoNotationElement (PositionedDoNotationElement pos com e) = PositionedDoNotationElement pos com <$> handleDoNotationElement e++  handleGuard :: Guard -> m Guard+  handleGuard (ConditionGuard e) = ConditionGuard <$> g' e+  handleGuard (PatternGuard b e) = PatternGuard <$> h' b <*> g' e++everythingOnValues+  :: forall r+   . (r -> r -> r)+  -> (Declaration -> r)+  -> (Expr -> r)+  -> (Binder -> r)+  -> (CaseAlternative -> r)+  -> (DoNotationElement -> r)+  -> ( Declaration -> r+     , Expr -> r+     , Binder -> r+     , CaseAlternative -> r+     , DoNotationElement -> r+     )+everythingOnValues (<>.) f g h i j = (f', g', h', i', j')+  where++  f' :: Declaration -> r+  f' d@(DataBindingGroupDeclaration ds) = foldl (<>.) (f d) (fmap f' ds)+  f' d@(ValueDeclaration vd) = foldl (<>.) (f d) (fmap h' (valdeclBinders vd) ++ concatMap (\(GuardedExpr grd v) -> fmap k' grd ++ [g' v]) (valdeclExpression vd))+  f' d@(BindingGroupDeclaration ds) = foldl (<>.) (f d) (fmap (\(_, _, val) -> g' val) ds)+  f' d@(TypeClassDeclaration _ _ _ _ _ ds) = foldl (<>.) (f d) (fmap f' ds)+  f' d@(TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldl (<>.) (f d) (fmap f' ds)+  f' d@(BoundValueDeclaration _ b expr) = f d <>. h' b <>. g' expr+  f' d = f d++  g' :: Expr -> r+  g' v@(Literal _ l) = lit (g v) g' l+  g' v@(UnaryMinus _ v1) = g v <>. g' v1+  g' v@(BinaryNoParens op v1 v2) = g v <>. g' op <>. g' v1 <>. g' v2+  g' v@(Parens v1) = g v <>. g' v1+  g' v@(Accessor _ v1) = g v <>. g' v1+  g' v@(ObjectUpdate obj vs) = foldl (<>.) (g v <>. g' obj) (fmap (g' . snd) vs)+  g' v@(ObjectUpdateNested obj vs) = foldl (<>.) (g v <>. g' obj) (fmap g' vs)+  g' v@(Abs b v1) = g v <>. h' b <>. g' v1+  g' v@(App v1 v2) = g v <>. g' v1 <>. g' v2+  g' v@(Unused v1) = g v <>. g' v1+  g' v@(IfThenElse v1 v2 v3) = g v <>. g' v1 <>. g' v2 <>. g' v3+  g' v@(Case vs alts) = foldl (<>.) (foldl (<>.) (g v) (fmap g' vs)) (fmap i' alts)+  g' v@(TypedValue _ v1 _) = g v <>. g' v1+  g' v@(Let _ ds v1) = foldl (<>.) (g v) (fmap f' ds) <>. g' v1+  g' v@(Do _ es) = foldl (<>.) (g v) (fmap j' es)+  g' v@(Ado _ es v1) = foldl (<>.) (g v) (fmap j' es) <>. g' v1+  g' v@(PositionedValue _ _ v1) = g v <>. g' v1+  g' v = g v++  h' :: Binder -> r+  h' b@(LiteralBinder _ l) = lit (h b) h' l+  h' b@(ConstructorBinder _ _ bs) = foldl (<>.) (h b) (fmap h' bs)+  h' b@(BinaryNoParensBinder b1 b2 b3) = h b <>. h' b1 <>. h' b2 <>. h' b3+  h' b@(ParensInBinder b1) = h b <>. h' b1+  h' b@(NamedBinder _ _ b1) = h b <>. h' b1+  h' b@(PositionedBinder _ _ b1) = h b <>. h' b1+  h' b@(TypedBinder _ b1) = h b <>. h' b1+  h' b = h b++  lit :: r -> (a -> r) -> Literal a -> r+  lit r go (ArrayLiteral as) = foldl (<>.) r (fmap go as)+  lit r go (ObjectLiteral as) = foldl (<>.) r (fmap (go . snd) as)+  lit r _ _ = r++  i' :: CaseAlternative -> r+  i' ca@(CaseAlternative bs gs) =+    foldl (<>.) (i ca) (fmap h' bs ++ concatMap (\(GuardedExpr grd val) -> fmap k' grd ++ [g' val]) gs)++  j' :: DoNotationElement -> r+  j' e@(DoNotationValue v) = j e <>. g' v+  j' e@(DoNotationBind b v) = j e <>. h' b <>. g' v+  j' e@(DoNotationLet ds) = foldl (<>.) (j e) (fmap f' ds)+  j' e@(PositionedDoNotationElement _ _ e1) = j e <>. j' e1++  k' :: Guard -> r+  k' (ConditionGuard e) = g' e+  k' (PatternGuard b e) = h' b <>. g' e++everythingWithContextOnValues+  :: forall s r+   . s+  -> r+  -> (r -> r -> r)+  -> (s -> Declaration       -> (s, r))+  -> (s -> Expr              -> (s, r))+  -> (s -> Binder            -> (s, r))+  -> (s -> CaseAlternative   -> (s, r))+  -> (s -> DoNotationElement -> (s, r))+  -> ( Declaration       -> r+     , Expr              -> r+     , Binder            -> r+     , CaseAlternative   -> r+     , DoNotationElement -> r)+everythingWithContextOnValues s0 r0 (<>.) f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j'' s0)+  where++  f'' :: s -> Declaration -> r+  f'' s d = let (s', r) = f s d in r <>. f' s' d++  f' :: s -> Declaration -> r+  f' s (DataBindingGroupDeclaration ds) = foldl (<>.) r0 (fmap (f'' s) ds)+  f' s (ValueDeclaration vd) = foldl (<>.) r0 (fmap (h'' s) (valdeclBinders vd) ++ concatMap (\(GuardedExpr grd v) -> fmap (k' s) grd ++ [g'' s v]) (valdeclExpression vd))+  f' s (BindingGroupDeclaration ds) = foldl (<>.) r0 (fmap (\(_, _, val) -> g'' s val) ds)+  f' s (TypeClassDeclaration _ _ _ _ _ ds) = foldl (<>.) r0 (fmap (f'' s) ds)+  f' s (TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldl (<>.) r0 (fmap (f'' s) ds)+  f' _ _ = r0++  g'' :: s -> Expr -> r+  g'' s v = let (s', r) = g s v in r <>. g' s' v++  g' :: s -> Expr -> r+  g' s (Literal _ l) = lit g'' s l+  g' s (UnaryMinus _ v1) = g'' s v1+  g' s (BinaryNoParens op v1 v2) = g'' s op <>. g'' s v1 <>. g'' s v2+  g' s (Parens v1) = g'' s v1+  g' s (Accessor _ v1) = g'' s v1+  g' s (ObjectUpdate obj vs) = foldl (<>.) (g'' s obj) (fmap (g'' s . snd) vs)+  g' s (ObjectUpdateNested obj vs) = foldl (<>.) (g'' s obj) (fmap (g'' s) vs)+  g' s (Abs binder v1) = h'' s binder <>. g'' s v1+  g' s (App v1 v2) = g'' s v1 <>. g'' s v2+  g' s (Unused v) = g'' s v+  g' s (IfThenElse v1 v2 v3) = g'' s v1 <>. g'' s v2 <>. g'' s v3+  g' s (Case vs alts) = foldl (<>.) (foldl (<>.) r0 (fmap (g'' s) vs)) (fmap (i'' s) alts)+  g' s (TypedValue _ v1 _) = g'' s v1+  g' s (Let _ ds v1) = foldl (<>.) r0 (fmap (f'' s) ds) <>. g'' s v1+  g' s (Do _ es) = foldl (<>.) r0 (fmap (j'' s) es)+  g' s (Ado _ es v1) = foldl (<>.) r0 (fmap (j'' s) es) <>. g'' s v1+  g' s (PositionedValue _ _ v1) = g'' s v1+  g' _ _ = r0++  h'' :: s -> Binder -> r+  h'' s b = let (s', r) = h s b in r <>. h' s' b++  h' :: s -> Binder -> r+  h' s (LiteralBinder _ l) = lit h'' s l+  h' s (ConstructorBinder _ _ bs) = foldl (<>.) r0 (fmap (h'' s) bs)+  h' s (BinaryNoParensBinder b1 b2 b3) = h'' s b1 <>. h'' s b2 <>. h'' s b3+  h' s (ParensInBinder b) = h'' s b+  h' s (NamedBinder _ _ b1) = h'' s b1+  h' s (PositionedBinder _ _ b1) = h'' s b1+  h' s (TypedBinder _ b1) = h'' s b1+  h' _ _ = r0++  lit :: (s -> a -> r) -> s -> Literal a -> r+  lit go s (ArrayLiteral as) = foldl (<>.) r0 (fmap (go s) as)+  lit go s (ObjectLiteral as) = foldl (<>.) r0 (fmap (go s . snd) as)+  lit _ _ _ = r0++  i'' :: s -> CaseAlternative -> r+  i'' s ca = let (s', r) = i s ca in r <>. i' s' ca++  i' :: s -> CaseAlternative -> r+  i' s (CaseAlternative bs gs) = foldl (<>.) r0 (fmap (h'' s) bs ++ concatMap (\(GuardedExpr grd val) -> fmap (k' s) grd ++ [g'' s val]) gs)++  j'' :: s -> DoNotationElement -> r+  j'' s e = let (s', r) = j s e in r <>. j' s' e++  j' :: s -> DoNotationElement -> r+  j' s (DoNotationValue v) = g'' s v+  j' s (DoNotationBind b v) = h'' s b <>. g'' s v+  j' s (DoNotationLet ds) = foldl (<>.) r0 (fmap (f'' s) ds)+  j' s (PositionedDoNotationElement _ _ e1) = j'' s e1++  k' :: s -> Guard -> r+  k' s (ConditionGuard e) = g'' s e+  k' s (PatternGuard b e) = h'' s b <>. g'' s e++everywhereWithContextOnValues+  :: forall s+   . s+  -> (s -> Declaration       -> (s, Declaration))+  -> (s -> Expr              -> (s, Expr))+  -> (s -> Binder            -> (s, Binder))+  -> (s -> CaseAlternative   -> (s, CaseAlternative))+  -> (s -> DoNotationElement -> (s, DoNotationElement))+  -> ( Declaration       -> Declaration+     , Expr              -> Expr+     , Binder            -> Binder+     , CaseAlternative   -> CaseAlternative+     , DoNotationElement -> DoNotationElement+     )+everywhereWithContextOnValues s f g h i j = (runIdentity . f', runIdentity . g', runIdentity . h', runIdentity . i', runIdentity . j')+  where+  (f', g', h', i', j') = everywhereWithContextOnValuesM s (wrap f) (wrap g) (wrap h) (wrap i) (wrap j)+  wrap = ((pure .) .)++everywhereWithContextOnValuesM+  :: forall m s+   . (Monad m)+  => s+  -> (s -> Declaration       -> m (s, Declaration))+  -> (s -> Expr              -> m (s, Expr))+  -> (s -> Binder            -> m (s, Binder))+  -> (s -> CaseAlternative   -> m (s, CaseAlternative))+  -> (s -> DoNotationElement -> m (s, DoNotationElement))+  -> ( Declaration       -> m Declaration+     , Expr              -> m Expr+     , Binder            -> m Binder+     , CaseAlternative   -> m CaseAlternative+     , DoNotationElement -> m DoNotationElement+     )+everywhereWithContextOnValuesM s0 f g h i j = (f'' s0, g'' s0, h'' s0, i'' s0, j'' s0)+  where+  f'' s = uncurry f' <=< f s++  f' s (DataBindingGroupDeclaration ds) = DataBindingGroupDeclaration <$> traverse (f'' s) ds+  f' s (ValueDecl sa name nameKind bs val) =+    ValueDecl sa name nameKind <$> traverse (h'' s) bs <*> traverse (guardedExprM (k' s) (g'' s)) val+  f' s (BindingGroupDeclaration ds) = BindingGroupDeclaration <$> traverse (thirdM (g'' s)) ds+  f' s (TypeClassDeclaration sa name args implies deps ds) = TypeClassDeclaration sa name args implies deps <$> traverse (f'' s) ds+  f' s (TypeInstanceDeclaration sa ch idx name cs className args ds) = TypeInstanceDeclaration sa ch idx name cs className args <$> traverseTypeInstanceBody (traverse (f'' s)) ds+  f' _ other = return other++  g'' s = uncurry g' <=< g s++  g' s (Literal ss l) = Literal ss <$> lit g'' s l+  g' s (UnaryMinus ss v) = UnaryMinus ss <$> g'' s v+  g' s (BinaryNoParens op v1 v2) = BinaryNoParens <$> g'' s op <*> g'' s v1 <*> g'' s v2+  g' s (Parens v) = Parens <$> g'' s v+  g' s (Accessor prop v) = Accessor prop <$> g'' s v+  g' s (ObjectUpdate obj vs) = ObjectUpdate <$> g'' s obj <*> traverse (sndM (g'' s)) vs+  g' s (ObjectUpdateNested obj vs) = ObjectUpdateNested <$> g'' s obj <*> traverse (g'' s) vs+  g' s (Abs binder v) = Abs <$> h' s binder <*> g'' s v+  g' s (App v1 v2) = App <$> g'' s v1 <*> g'' s v2+  g' s (Unused v) = Unused <$> g'' s v+  g' s (IfThenElse v1 v2 v3) = IfThenElse <$> g'' s v1 <*> g'' s v2 <*> g'' s v3+  g' s (Case vs alts) = Case <$> traverse (g'' s) vs <*> traverse (i'' s) alts+  g' s (TypedValue check v ty) = TypedValue check <$> g'' s v <*> pure ty+  g' s (Let w ds v) = Let w <$> traverse (f'' s) ds <*> g'' s v+  g' s (Do m es) = Do m <$> traverse (j'' s) es+  g' s (Ado m es v) = Ado m <$> traverse (j'' s) es <*> g'' s v+  g' s (PositionedValue pos com v) = PositionedValue pos com <$> g'' s v+  g' _ other = return other++  h'' s = uncurry h' <=< h s++  h' s (LiteralBinder ss l) = LiteralBinder ss <$> lit h'' s l+  h' s (ConstructorBinder ss ctor bs) = ConstructorBinder ss ctor <$> traverse (h'' s) bs+  h' s (BinaryNoParensBinder b1 b2 b3) = BinaryNoParensBinder <$> h'' s b1 <*> h'' s b2 <*> h'' s b3+  h' s (ParensInBinder b) = ParensInBinder <$> h'' s b+  h' s (NamedBinder ss name b) = NamedBinder ss name <$> h'' s b+  h' s (PositionedBinder pos com b) = PositionedBinder pos com <$> h'' s b+  h' s (TypedBinder t b) = TypedBinder t <$> h'' s b+  h' _ other = return other++  lit :: (s -> a -> m a) -> s -> Literal a -> m (Literal a)+  lit go s (ArrayLiteral as) = ArrayLiteral <$> traverse (go s) as+  lit go s (ObjectLiteral as) = ObjectLiteral <$> traverse (sndM (go s)) as+  lit _ _ other = return other++  i'' s = uncurry i' <=< i s++  i' s (CaseAlternative bs val) = CaseAlternative <$> traverse (h'' s) bs <*> traverse (guardedExprM (k' s) (g'' s)) val++  j'' s = uncurry j' <=< j s++  j' s (DoNotationValue v) = DoNotationValue <$> g'' s v+  j' s (DoNotationBind b v) = DoNotationBind <$> h'' s b <*> g'' s v+  j' s (DoNotationLet ds) = DoNotationLet <$> traverse (f'' s) ds+  j' s (PositionedDoNotationElement pos com e1) = PositionedDoNotationElement pos com <$> j'' s e1++  k' s (ConditionGuard e) = ConditionGuard <$> g'' s e+  k' s (PatternGuard b e) = PatternGuard <$> h'' s b <*> g'' s e++data ScopedIdent = LocalIdent Ident | ToplevelIdent Ident+  deriving (Show, Eq, Ord)++inScope :: Ident -> S.Set ScopedIdent -> Bool+inScope i s = (LocalIdent i `S.member` s) || (ToplevelIdent i `S.member` s)++everythingWithScope+  :: forall r+   . (Monoid r)+  => (S.Set ScopedIdent -> Declaration -> r)+  -> (S.Set ScopedIdent -> Expr -> r)+  -> (S.Set ScopedIdent -> Binder -> r)+  -> (S.Set ScopedIdent -> CaseAlternative -> r)+  -> (S.Set ScopedIdent -> DoNotationElement -> r)+  -> ( S.Set ScopedIdent -> Declaration -> r+     , S.Set ScopedIdent -> Expr -> r+     , S.Set ScopedIdent -> Binder -> r+     , S.Set ScopedIdent -> CaseAlternative -> r+     , S.Set ScopedIdent -> DoNotationElement -> r+     )+everythingWithScope f g h i j = (f'', g'', h'', i'', \s -> snd . j'' s)+  where+  f'' :: S.Set ScopedIdent -> Declaration -> r+  f'' s a = f s a <> f' s a++  f' :: S.Set ScopedIdent -> Declaration -> r+  f' s (DataBindingGroupDeclaration ds) =+    let s' = S.union s (S.fromList (map ToplevelIdent (mapMaybe getDeclIdent (NEL.toList ds))))+    in foldMap (f'' s') ds+  f' s (ValueDecl _ name _ bs val) =+    let s' = S.insert (ToplevelIdent name) s+        s'' = S.union s' (S.fromList (concatMap localBinderNames bs))+    in foldMap (h'' s') bs <> foldMap (l' s'') val+  f' s (BindingGroupDeclaration ds) =+    let s' = S.union s (S.fromList (NEL.toList (fmap (\((_, name), _, _) -> ToplevelIdent name) ds)))+    in foldMap (\(_, _, val) -> g'' s' val) ds+  f' s (TypeClassDeclaration _ _ _ _ _ ds) = foldMap (f'' s) ds+  f' s (TypeInstanceDeclaration _ _ _ _ _ _ _ (ExplicitInstance ds)) = foldMap (f'' s) ds+  f' _ _ = mempty++  g'' :: S.Set ScopedIdent -> Expr -> r+  g'' s a = g s a <> g' s a++  g' :: S.Set ScopedIdent -> Expr -> r+  g' s (Literal _ l) = lit g'' s l+  g' s (UnaryMinus _ v1) = g'' s v1+  g' s (BinaryNoParens op v1 v2) = g'' s op <> g'' s v1 <> g'' s v2+  g' s (Parens v1) = g'' s v1+  g' s (Accessor _ v1) = g'' s v1+  g' s (ObjectUpdate obj vs) = g'' s obj <> foldMap (g'' s . snd) vs+  g' s (ObjectUpdateNested obj vs) = g'' s obj <> foldMap (g'' s) vs+  g' s (Abs b v1) =+    let s' = S.union (S.fromList (localBinderNames b)) s+    in h'' s b <> g'' s' v1+  g' s (App v1 v2) = g'' s v1 <> g'' s v2+  g' s (Unused v) = g'' s v+  g' s (IfThenElse v1 v2 v3) = g'' s v1 <> g'' s v2 <> g'' s v3+  g' s (Case vs alts) = foldMap (g'' s) vs <> foldMap (i'' s) alts+  g' s (TypedValue _ v1 _) = g'' s v1+  g' s (Let _ ds v1) =+    let s' = S.union s (S.fromList (map LocalIdent (mapMaybe getDeclIdent ds)))+    in foldMap (f'' s') ds <> g'' s' v1+  g' s (Do _ es) = fold . snd . mapAccumL j'' s $ es+  g' s (Ado _ es v1) =+    let s' = S.union s (foldMap (fst . j'' s) es)+    in g'' s' v1+  g' s (PositionedValue _ _ v1) = g'' s v1+  g' _ _ = mempty++  h'' :: S.Set ScopedIdent -> Binder -> r+  h'' s a = h s a <> h' s a++  h' :: S.Set ScopedIdent -> Binder -> r+  h' s (LiteralBinder _ l) = lit h'' s l+  h' s (ConstructorBinder _ _ bs) = foldMap (h'' s) bs+  h' s (BinaryNoParensBinder b1 b2 b3) = foldMap (h'' s) [b1, b2, b3]+  h' s (ParensInBinder b) = h'' s b+  h' s (NamedBinder _ name b1) = h'' (S.insert (LocalIdent name) s) b1+  h' s (PositionedBinder _ _ b1) = h'' s b1+  h' s (TypedBinder _ b1) = h'' s b1+  h' _ _ = mempty++  lit :: (S.Set ScopedIdent -> a -> r) -> S.Set ScopedIdent -> Literal a -> r+  lit go s (ArrayLiteral as) = foldMap (go s) as+  lit go s (ObjectLiteral as) = foldMap (go s . snd) as+  lit _ _ _ = mempty++  i'' :: S.Set ScopedIdent -> CaseAlternative -> r+  i'' s a = i s a <> i' s a++  i' :: S.Set ScopedIdent -> CaseAlternative -> r+  i' s (CaseAlternative bs gs) =+    let s' = S.union s (S.fromList (concatMap localBinderNames bs))+    in foldMap (h'' s) bs <> foldMap (l' s') gs++  j'' :: S.Set ScopedIdent -> DoNotationElement -> (S.Set ScopedIdent, r)+  j'' s a = let (s', r) = j' s a in (s', j s a <> r)++  j' :: S.Set ScopedIdent -> DoNotationElement -> (S.Set ScopedIdent, r)+  j' s (DoNotationValue v) = (s, g'' s v)+  j' s (DoNotationBind b v) =+    let s' = S.union (S.fromList (localBinderNames b)) s+    in (s', h'' s b <> g'' s v)+  j' s (DoNotationLet ds) =+    let s' = S.union s (S.fromList (map LocalIdent (mapMaybe getDeclIdent ds)))+    in (s', foldMap (f'' s') ds)+  j' s (PositionedDoNotationElement _ _ e1) = j'' s e1++  k' :: S.Set ScopedIdent -> Guard -> (S.Set ScopedIdent, r)+  k' s (ConditionGuard e) = (s, g'' s e)+  k' s (PatternGuard b e) =+    let s' = S.union (S.fromList (localBinderNames b)) s+    in (s', h'' s b <> g'' s' e)++  l' s (GuardedExpr [] e) = g'' s e+  l' s (GuardedExpr (grd:gs) e) =+    let (s', r) = k' s grd+    in r <> l' s' (GuardedExpr gs e)++  getDeclIdent :: Declaration -> Maybe Ident+  getDeclIdent (ValueDeclaration vd) = Just (valdeclIdent vd)+  getDeclIdent (TypeDeclaration td) = Just (tydeclIdent td)+  getDeclIdent _ = Nothing++  localBinderNames = map LocalIdent . binderNames++accumTypes+  :: (Monoid r)+  => (SourceType -> r)+  -> ( Declaration -> r+     , Expr -> r+     , Binder -> r+     , CaseAlternative -> r+     , DoNotationElement -> r+     )+accumTypes f = everythingOnValues mappend forDecls forValues forBinders (const mempty) (const mempty)+  where+  forDecls (DataDeclaration _ _ _ args dctors) =+    foldMap (foldMap f . snd) args <>+    foldMap (foldMap (f . snd) . dataCtorFields) dctors+  forDecls (ExternDataDeclaration _ _ ty) = f ty+  forDecls (ExternDeclaration _ _ ty) = f ty+  forDecls (TypeClassDeclaration _ _ args implies _ _) =+    foldMap (foldMap (foldMap f)) args <>+    foldMap (foldMap f . constraintArgs) implies+  forDecls (TypeInstanceDeclaration _ _ _ _ cs _ tys _) =+    foldMap (foldMap f . constraintArgs) cs <> foldMap f tys+  forDecls (TypeSynonymDeclaration _ _ args ty) =+    foldMap (foldMap f . snd) args <>+    f ty+  forDecls (KindDeclaration _ _ _ ty) = f ty+  forDecls (TypeDeclaration td) = f (tydeclType td)+  forDecls _ = mempty++  forValues (TypeClassDictionary c _ _) = foldMap f (constraintArgs c)+  forValues (DeferredDictionary _ tys) = foldMap f tys+  forValues (TypedValue _ _ ty) = f ty+  forValues _ = mempty++  forBinders (TypedBinder ty _) = f ty+  forBinders _ = mempty++-- |+-- Map a function over type annotations appearing inside a value+--+overTypes :: (SourceType -> SourceType) -> Expr -> Expr+overTypes f = let (_, f', _) = everywhereOnValues id g id in f'+  where+  g :: Expr -> Expr+  g (TypedValue checkTy val t) = TypedValue checkTy val (f t)+  g (TypeClassDictionary c sco hints) =+    TypeClassDictionary+      (mapConstraintArgs (fmap f) c)+      (updateCtx sco)+      hints+  g other = other+  updateDict fn dict = dict { tcdInstanceTypes = fn (tcdInstanceTypes dict) }+  updateScope = fmap . fmap . fmap . fmap $ updateDict $ fmap f+  updateCtx = M.alter updateScope Nothing
src/Language/PureScript/Bundle.hs view
@@ -5,55 +5,39 @@ -- performs dead code elimination, filters empty modules, -- and generates the final JavaScript bundle. module Language.PureScript.Bundle-  ( bundle-  , bundleSM-  , guessModuleIdentifier-  , ModuleIdentifier(..)-  , moduleName+  ( ModuleIdentifier(..)   , ModuleType(..)   , ErrorMessage(..)   , printErrorMessage+  , ForeignModuleExports(..)   , getExportedIdentifiers+  , ForeignModuleImports(..)+  , getImportedModules   , Module   ) where  import Prelude.Compat-import Protolude (ordNub) -import Control.Monad import Control.Monad.Error.Class-import Control.Arrow ((&&&))  import Data.Aeson ((.=))-import Data.Array ((!)) import Data.Char (chr, digitToInt) import Data.Foldable (fold)-import Data.Generics (GenericM, everything, everythingWithContext, everywhere, gmapMo, mkMp, mkQ, mkT)-import Data.Graph-import Data.List (stripPrefix, (\\))-import Data.Maybe (catMaybes, fromMaybe, mapMaybe)-import Data.Version (showVersion)+import Data.Maybe (mapMaybe, maybeToList) import qualified Data.Aeson as A-import qualified Data.Map as M-import qualified Data.Set as S-import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy as LT  import Language.JavaScript.Parser import Language.JavaScript.Parser.AST import Language.JavaScript.Process.Minify -import qualified Paths_purescript as Paths--import System.FilePath (takeFileName, takeDirectory, takeDirectory, makeRelative)--import SourceMap.Types- -- | The type of error messages. We separate generation and rendering of errors using a data -- type, in case we need to match on error types later. data ErrorMessage   = UnsupportedModulePath String   | InvalidTopLevel   | UnableToParseModule String+  | UnsupportedImport   | UnsupportedExport   | ErrorInModule ModuleIdentifier ErrorMessage   | MissingEntryPoint String@@ -80,17 +64,6 @@              , "type" .= show mt              ] -moduleName :: ModuleIdentifier -> String-moduleName (ModuleIdentifier name _) = name---- | Given a filename, assuming it is in the correct place on disk, infer a ModuleIdentifier.-guessModuleIdentifier :: MonadError ErrorMessage m => FilePath -> m ModuleIdentifier-guessModuleIdentifier filename = ModuleIdentifier (takeFileName (takeDirectory filename)) <$> guessModuleType (takeFileName filename)-  where-    guessModuleType "index.js" = pure Regular-    guessModuleType "foreign.js" = pure Foreign-    guessModuleType name = throwError $ UnsupportedModulePath name- data Visibility   = Public   | Internal@@ -111,7 +84,7 @@  -- | There are four types of module element we are interested in: ----- 1) Require statements+-- 1) Import declarations and require statements -- 2) Member declarations -- 3) Export lists -- 4) Everything else@@ -119,22 +92,22 @@ -- Each is labelled with the original AST node which generated it, so that we can dump it back -- into the output during codegen. data ModuleElement-  = Require JSStatement String (Either String ModuleIdentifier)+  = Import JSModuleItem String (Either String ModuleIdentifier)   | Member JSStatement Visibility String JSExpression [Key]   | ExportsList [(ExportType, String, JSExpression, [Key])]   | Other JSStatement-  | Skip JSStatement+  | Skip JSModuleItem   deriving (Show)  instance A.ToJSON ModuleElement where   toJSON = \case-    (Require _ name (Right target)) ->-      A.object [ "type"   .= A.String "Require"+    (Import _ name (Right target)) ->+      A.object [ "type"   .= A.String "Import"                , "name"   .= name                , "target" .= target                ]-    (Require _ name (Left targetPath)) ->-      A.object [ "type"       .= A.String "Require"+    (Import _ name (Left targetPath)) ->+      A.object [ "type"       .= A.String "Import"                , "name"       .= name                , "targetPath" .= targetPath                ]@@ -150,11 +123,11 @@                ]     (Other stmt) ->       A.object [ "type" .= A.String "Other"-               , "js"   .= getFragment stmt+               , "js"   .= getFragment (JSAstStatement stmt JSNoAnnot)                ]-    (Skip stmt) ->+    (Skip item) ->       A.object [ "type" .= A.String "Skip"-               , "js"   .= getFragment stmt+               , "js"   .= getFragment (JSAstModule [item] JSNoAnnot)                ]      where@@ -177,9 +150,9 @@                , "dependsOn" .= map keyToJSON dependsOn                ] -    getFragment = ellipsize . renderToText . minifyJS . flip JSAstStatement JSNoAnnot+    getFragment = ellipsize . renderToText . minifyJS       where-      ellipsize text = if T.compareLength text 20 == GT then T.take 19 text `T.snoc` ellipsis else text+      ellipsize text = if LT.compareLength text 20 == GT then LT.take 19 text `LT.snoc` ellipsis else text       ellipsis = '\x2026'  -- | A module is just a list of elements of the types listed above.@@ -195,10 +168,11 @@ -- | Prepare an error message for consumption by humans. printErrorMessage :: ErrorMessage -> [String] printErrorMessage (UnsupportedModulePath s) =-  [ "A CommonJS module has an unsupported name (" ++ show s ++ ")."+  [ "An ES or CommonJS module has an unsupported name (" ++ show s ++ ")."   , "The following file names are supported:"   , "  1) index.js (PureScript native modules)"-  , "  2) foreign.js (PureScript foreign modules)"+  , "  2) foreign.js (PureScript ES foreign modules)"+  , "  3) foreign.cjs (PureScript CommonJS foreign modules)"   ] printErrorMessage InvalidTopLevel =   [ "Expected a list of source elements at the top level." ]@@ -206,10 +180,24 @@   [ "The module could not be parsed:"   , err   ]+printErrorMessage UnsupportedImport =+  [ "An import was unsupported."+  , "Modules can be imported with ES namespace imports declarations:"+  , "  import * as module from \"Module.Name\""+  , "Alternatively, they can be also be imported with the CommonJS require function:"+  , "  var module = require(\"Module.Name\")"+  ] printErrorMessage UnsupportedExport =-  [ "An export was unsupported. Exports can be defined in one of two ways: "-  , "  1) exports.name = ..."-  , "  2) exports = { ... }"+  [ "An export was unsupported."+  , "Declarations can be exported as ES named exports:"+  , "  export var decl"+  , "Existing identifiers can be exported as well:"+  , "  export { name }"+  , "They can also be renamed on export:"+  , "  export { name as alias }"+  , "Alternatively, CommonJS exports can be defined in one of two ways:"+  , "  1) exports.name = value"+  , "  2) exports = { name: value }"   ] printErrorMessage (ErrorInModule mid e) =   ("Error in module " ++ displayIdentifier mid ++ ":")@@ -219,116 +207,12 @@     displayIdentifier (ModuleIdentifier name ty) =       name ++ " (" ++ showModuleType ty ++ ")" printErrorMessage (MissingEntryPoint mName) =-  [ "Couldn't find a CommonJS module for the specified entry point: " ++ mName+  [ "Could not find an ES module or CommonJS module for the specified entry point: " ++ mName   ] printErrorMessage (MissingMainModule mName) =-  [ "Couldn't find a CommonJS module for the specified main module: " ++ mName+  [ "Could not find an ES module or CommonJS module for the specified main module: " ++ mName   ] --- | Calculate the ModuleIdentifier which a require(...) statement imports.-checkImportPath :: String -> ModuleIdentifier -> S.Set String -> Either String ModuleIdentifier-checkImportPath "./foreign.js" m _ =-  Right (ModuleIdentifier (moduleName m) Foreign)-checkImportPath name _ names-  | Just name' <- stripSuffix "/index.js" =<< stripPrefix "../" name-  , name' `S.member` names = Right (ModuleIdentifier name' Regular)-checkImportPath name _ _ = Left name--stripSuffix :: Eq a => [a] -> [a] -> Maybe [a]-stripSuffix suffix xs =-  case splitAt (length xs - length suffix) xs of-    (before, after)-      | after == suffix -> Just before-      | otherwise -> Nothing---- | Compute the dependencies of all elements in a module, and add them to the tree.------ Members and exports can have dependencies. A dependency is of one of the following forms:------ 1) module.name or member["name"]------    where module was imported using------    var module = require("Module.Name");------ 2) name------    where name is the name of a member defined in the current module.-withDeps :: Module -> Module-withDeps (Module modulePath fn es) = Module modulePath fn (map expandDeps es)-  where-  -- | Collects all modules which are imported, so that we can identify dependencies of the first type.-  imports :: [(String, ModuleIdentifier)]-  imports = mapMaybe toImport es-    where-    toImport :: ModuleElement -> Maybe (String, ModuleIdentifier)-    toImport (Require _ nm (Right mid)) = Just (nm, mid)-    toImport _ = Nothing--  -- | Collects all member names in scope, so that we can identify dependencies of the second type.-  boundNames :: [String]-  boundNames = mapMaybe toBoundName es-    where-    toBoundName :: ModuleElement -> Maybe String-    toBoundName (Member _ Internal nm _ _) = Just nm-    toBoundName _ = Nothing--  -- | Calculate dependencies and add them to the current element.-  expandDeps :: ModuleElement -> ModuleElement-  expandDeps (Member n f nm decl _) = Member n f nm decl (ordNub $ dependencies modulePath decl)-  expandDeps (ExportsList exps) = ExportsList (map expand exps)-      where-      expand (ty, nm, n1, _) = (ty, nm, n1, ordNub (dependencies modulePath n1))-  expandDeps other = other--  dependencies :: ModuleIdentifier -> JSExpression -> [Key]-  dependencies m = everythingWithContext boundNames (++) (mkQ (const [] &&& id) toReference)-    where-    toReference :: JSExpression -> [String] -> ([Key], [String])-    toReference (JSMemberDot mn _ nm) bn-      | JSIdentifier _ mn' <- mn-      , JSIdentifier _ nm' <- nm-      , Just mid <- lookup mn' imports-      = ([(mid, nm', Public)], bn)-    toReference (JSMemberSquare mn _ nm _) bn-      | JSIdentifier _ mn' <- mn-      , Just nm' <- fromStringLiteral nm-      , Just mid <- lookup mn' imports-      = ([(mid, nm', Public)], bn)-    toReference (JSIdentifier _ nm) bn-      | nm `elem` bn-      -- only add a dependency if this name is still in the list of names-      -- bound to the module level (i.e., hasn't been shadowed by a function-      -- parameter)-      = ([(m, nm, Internal)], bn)-    toReference (JSObjectLiteral _ props _) bn-      = let-          shorthandNames =-            filter (`elem` bn) $-            -- only add a dependency if this name is still in the list of-            -- names bound to the module level (i.e., hasn't been shadowed by a-            -- function parameter)-            mapMaybe unPropertyIdentRef $-            trailingCommaList props-        in-          (map (m, , Internal) shorthandNames, bn)-    toReference (JSFunctionExpression _ _ _ params _ _) bn-      = ([], bn \\ mapMaybe unIdentifier (commaList params))-    toReference e bn-      | Just nm <- exportsAccessor e-      -- exports.foo means there's a dependency on the public member "foo" of-      -- this module.-      = ([(m, nm, Public)], bn)-    toReference _ bn = ([], bn)--    unIdentifier :: JSExpression -> Maybe String-    unIdentifier (JSIdentifier _ name) = Just name-    unIdentifier _ = Nothing--    unPropertyIdentRef :: JSObjectProperty -> Maybe String-    unPropertyIdentRef (JSPropertyIdentRef _ name) = Just name-    unPropertyIdentRef _ = Nothing- -- String literals include the quote chars fromStringLiteral :: JSExpression -> Maybe String fromStringLiteral (JSStringLiteral _ str) = Just $ strValue str@@ -369,52 +253,42 @@ trailingCommaList (JSCTLComma l _) = commaList l trailingCommaList (JSCTLNone l) = commaList l --- | Attempt to create a Module from a JavaScript AST.------ Each type of module element is matched using pattern guards, and everything else is bundled into the--- Other constructor.-toModule :: forall m. (MonadError ErrorMessage m) => S.Set String -> ModuleIdentifier -> Maybe FilePath -> JSAST -> m Module-toModule mids mid filename top-  | JSAstProgram smts _ <- top = Module mid filename <$> traverse toModuleElement smts-  | otherwise = err InvalidTopLevel-  where-  err :: ErrorMessage -> m a-  err = throwError . ErrorInModule mid+identName :: JSIdent -> Maybe String+identName (JSIdentName _ ident) = Just ident+identName _ = Nothing -  toModuleElement :: JSStatement -> m ModuleElement-  toModuleElement stmt-    | Just (importName, importPath) <- matchRequire mids mid stmt-    = pure (Require stmt importName importPath)-  toModuleElement stmt-    | Just (visibility, name, decl) <- matchMember stmt-    = pure (Member stmt visibility name decl [])-  toModuleElement stmt-    | Just props <- matchExportsAssignment stmt-    = ExportsList <$> traverse toExport (trailingCommaList props)-    where-      toExport :: JSObjectProperty -> m (ExportType, String, JSExpression, [Key])-      toExport (JSPropertyNameandValue name _ [val]) =-        (,,val,[]) <$> exportType val-                   <*> extractLabel' name-      toExport _ = err UnsupportedExport+exportStatementIdentifiers :: JSStatement -> [String]+exportStatementIdentifiers (JSVariable _ jsExpressions _) =+  varNames jsExpressions+exportStatementIdentifiers (JSConstant _ jsExpressions _) =+  varNames jsExpressions+exportStatementIdentifiers (JSLet _ jsExpressions _) =+  varNames jsExpressions+exportStatementIdentifiers (JSClass _ jsIdent _ _ _ _ _) =+  maybeToList . identName $ jsIdent+exportStatementIdentifiers (JSFunction _ jsIdent _ _ _ _ _) =+  maybeToList . identName $ jsIdent+exportStatementIdentifiers (JSGenerator _ _ jsIdent _ _ _ _ _) =+  maybeToList . identName $ jsIdent+exportStatementIdentifiers _ = [] -      exportType :: JSExpression -> m ExportType-      exportType (JSMemberDot f _ _)-        | JSIdentifier _ "$foreign" <- f-        = pure ForeignReexport-        | JSIdentifier _ ident <- f-        = pure (RegularExport ident)-      exportType (JSMemberSquare f _ _ _)-        | JSIdentifier _ "$foreign" <- f-        = pure ForeignReexport-        | JSIdentifier _ ident <- f-        = pure (RegularExport ident)-      exportType (JSIdentifier _ s) = pure (RegularExport s)-      exportType _ = err UnsupportedExport+varNames :: JSCommaList JSExpression -> [String]+varNames = mapMaybe varName . commaList+  where+  varName (JSVarInitExpression (JSIdentifier _ ident) _) = Just ident+  varName _ = Nothing -      extractLabel' = maybe (err UnsupportedExport) pure . extractLabel+data ForeignModuleExports =+  ForeignModuleExports+    { cjsExports :: [String]+    , esExports :: [String]+    } deriving (Show) -  toModuleElement other = pure (Other other)+instance Semigroup ForeignModuleExports where+  (ForeignModuleExports cjsExports esExports) <> (ForeignModuleExports cjsExports' esExports') =+    ForeignModuleExports (cjsExports <> cjsExports') (esExports <> esExports')+instance Monoid ForeignModuleExports where+  mempty = ForeignModuleExports [] []  -- Get a list of all the exported identifiers from a foreign module. --@@ -423,21 +297,25 @@ getExportedIdentifiers :: forall m. (MonadError ErrorMessage m)                           => String                           -> JSAST-                          -> m [String]+                          -> m ForeignModuleExports getExportedIdentifiers mname top-  | JSAstProgram stmts _ <- top = concat <$> traverse go stmts+  | JSAstModule jsModuleItems _ <- top = fold <$> traverse go jsModuleItems   | otherwise = err InvalidTopLevel   where   err :: ErrorMessage -> m a   err = throwError . ErrorInModule (ModuleIdentifier mname Foreign) -  go stmt-    | Just props <- matchExportsAssignment stmt-    = traverse toIdent (trailingCommaList props)-    | Just (Public, name, _) <- matchMember stmt-    = pure [name]+  go (JSModuleStatementListItem jsStatement)+    | Just props <- matchExportsAssignment jsStatement+    = do cjsExports <- traverse toIdent (trailingCommaList props)+         pure ForeignModuleExports{ cjsExports, esExports = [] }+    | Just (Public, name, _) <- matchMember jsStatement+    = pure ForeignModuleExports{ cjsExports = [name], esExports = [] }     | otherwise-    = pure []+    = pure mempty+  go (JSModuleExportDeclaration _ jsExportDeclaration) =+    pure ForeignModuleExports{ cjsExports = [], esExports = exportDeclarationIdentifiers jsExportDeclaration }+  go _ = pure mempty    toIdent (JSPropertyNameandValue name _ [_]) =     extractLabel' name@@ -446,13 +324,57 @@    extractLabel' = maybe (err UnsupportedExport) pure . extractLabel +  exportDeclarationIdentifiers (JSExportFrom jsExportClause _ _) =+    exportClauseIdentifiers jsExportClause+  exportDeclarationIdentifiers (JSExportLocals jsExportClause _) =+    exportClauseIdentifiers jsExportClause+  exportDeclarationIdentifiers (JSExport jsStatement _) =+    exportStatementIdentifiers jsStatement++  exportClauseIdentifiers (JSExportClause _ jsExportsSpecifiers _) =+    mapMaybe exportSpecifierName $ commaList jsExportsSpecifiers++  exportSpecifierName (JSExportSpecifier jsIdent) = identName jsIdent+  exportSpecifierName (JSExportSpecifierAs _ _ jsIdentAs) = identName jsIdentAs++data ForeignModuleImports =+  ForeignModuleImports+    { cjsImports :: [String]+    , esImports :: [String]+    } deriving (Show)++instance Semigroup ForeignModuleImports where+  (ForeignModuleImports cjsImports esImports) <> (ForeignModuleImports cjsImports' esImports') =+    ForeignModuleImports (cjsImports <> cjsImports') (esImports <> esImports')+instance Monoid ForeignModuleImports where+  mempty = ForeignModuleImports [] []++-- Get a list of all the imported module identifiers from a foreign module.+getImportedModules :: forall m. (MonadError ErrorMessage m)+                          => String+                          -> JSAST+                          -> m ForeignModuleImports+getImportedModules mname top+  | JSAstModule jsModuleItems _ <- top = pure $ foldMap go jsModuleItems+  | otherwise = err InvalidTopLevel+  where+  err :: ErrorMessage -> m a+  err = throwError . ErrorInModule (ModuleIdentifier mname Foreign)++  go (JSModuleStatementListItem jsStatement)+    | Just (_, mid) <- matchRequire jsStatement+    = ForeignModuleImports{ cjsImports = [mid], esImports = [] }+  go (JSModuleImportDeclaration _ jsImportDeclaration) =+    ForeignModuleImports{ cjsImports = [], esImports = [importDeclarationModuleId jsImportDeclaration] }+  go _ = mempty++  importDeclarationModuleId (JSImportDeclaration _ (JSFromClause _ _ mid) _) = mid+  importDeclarationModuleId (JSImportDeclarationBare _ mid _) = mid+ -- Matches JS statements like this: -- var ModuleName = require("file");-matchRequire :: S.Set String-                -> ModuleIdentifier-                -> JSStatement-                -> Maybe (String, Either String ModuleIdentifier)-matchRequire mids mid stmt+matchRequire :: JSStatement -> Maybe (String, String)+matchRequire stmt   | JSVariable _ jsInit _ <- stmt   , [JSVarInitExpression var varInit] <- commaList jsInit   , JSIdentifier _ importName <- var@@ -460,28 +382,34 @@   , JSMemberExpression req _ argsE _ <- jsInitEx   , JSIdentifier _ "require" <- req   , [ Just importPath ] <- map fromStringLiteral (commaList argsE)-  , importPath' <- checkImportPath importPath mid mids-  = Just (importName, importPath')+  = Just (importName, importPath)   | otherwise   = Nothing  -- Matches JS member declarations. matchMember :: JSStatement -> Maybe (Visibility, String, JSExpression) matchMember stmt+  | Just (name, decl) <- matchInternalMember stmt+  = pure (Internal, name, decl)+  -- exports.foo = expr; exports["foo"] = expr;+  | JSAssignStatement e (JSAssign _) decl _ <- stmt+  , Just name <- exportsAccessor e+  = Just (Public, name, decl)+  | otherwise+  = Nothing++matchInternalMember :: JSStatement -> Maybe (String, JSExpression)+matchInternalMember stmt   -- var foo = expr;   | JSVariable _ jsInit _ <- stmt   , [JSVarInitExpression var varInit] <- commaList jsInit   , JSIdentifier _ name <- var   , JSVarInit _ decl <- varInit-  = Just (Internal, name, decl)+  = pure (name, decl)   -- function foo(...args) { body }   | JSFunction a0 jsIdent a1 args a2 body _ <- stmt   , JSIdentName _ name <- jsIdent-  = pure (Internal, name, JSFunctionExpression a0 jsIdent a1 args a2 body)-  -- exports.foo = expr; exports["foo"] = expr;-  | JSAssignStatement e (JSAssign _) decl _ <- stmt-  , Just name <- exportsAccessor e-  = Just (Public, name, decl)+  = pure (name, JSFunctionExpression a0 jsIdent a1 args a2 body)   | otherwise   = Nothing @@ -514,365 +442,3 @@ extractLabel (JSPropertyString _ nm) = Just $ strValue nm extractLabel (JSPropertyIdent _ nm) = Just nm extractLabel _ = Nothing---- | Eliminate unused code based on the specified entry point set.-compile :: [Module] -> [ModuleIdentifier] -> [Module]-compile modules [] = modules-compile modules entryPoints = filteredModules-  where-  (graph, vertexToNode, vertexFor) = graphFromEdges verts--  -- | The vertex set-  verts :: [(ModuleElement, Key, [Key])]-  verts = do-    Module mid _ els <- modules-    concatMap (toVertices mid) els-    where-    -- | Create a set of vertices for a module element.-    ---    -- Require statements don't contribute towards dependencies, since they effectively get-    -- inlined wherever they are used inside other module elements.-    toVertices :: ModuleIdentifier -> ModuleElement -> [(ModuleElement, Key, [Key])]-    toVertices p m@(Member _ visibility nm _ deps) = [(m, (p, nm, visibility), deps)]-    toVertices p m@(ExportsList exps) = map toVertex exps-      where-      toVertex (ForeignReexport, nm, _, ks) = (m, (p, nm, Public), ks)-      toVertex (RegularExport _, nm, _, ks) = (m, (p, nm, Public), ks)-    toVertices _ _ = []--  -- | The set of vertices whose connected components we are interested in keeping.-  entryPointVertices :: [Vertex]-  entryPointVertices = catMaybes $ do-    (_, k@(mid, _, Public), _) <- verts-    guard $ mid `elem` entryPoints-    return (vertexFor k)--  -- | The set of vertices reachable from an entry point-  reachableSet :: S.Set Vertex-  reachableSet = S.fromList (concatMap (reachable graph) entryPointVertices)--  -- | A map from modules to the modules that are used by its reachable members.-  moduleReferenceMap :: M.Map ModuleIdentifier (S.Set ModuleIdentifier)-  moduleReferenceMap = M.fromAscListWith mappend $ map (vertToModule &&& vertToModuleRefs) $ S.toList reachableSet-    where-    vertToModuleRefs v = foldMap (S.singleton . vertToModule) $ graph ! v-    vertToModule v = m where (_, (m, _, _), _) = vertexToNode v--  filteredModules :: [Module]-  filteredModules = map filterUsed modules-    where-    filterUsed :: Module -> Module-    filterUsed (Module mid fn ds) = Module mid fn (map filterExports (go ds))-      where-      go :: [ModuleElement] -> [ModuleElement]-      go [] = []-      go (d : rest)-        | not (isDeclUsed d) = skipDecl d : go rest-        | otherwise = d : go rest--      skipDecl :: ModuleElement -> ModuleElement-      skipDecl (Require s _ _) = Skip s-      skipDecl (Member s _ _ _ _) = Skip s-      skipDecl (ExportsList _) = Skip (JSEmptyStatement JSNoAnnot)-      skipDecl (Other s) = Skip s-      skipDecl (Skip s) = Skip s--      -- | Filter out the exports for members which aren't used.-      filterExports :: ModuleElement -> ModuleElement-      filterExports (ExportsList exps) = ExportsList (filter (\(_, nm, _, _) -> isKeyUsed (mid, nm, Public)) exps)-      filterExports me = me--      isDeclUsed :: ModuleElement -> Bool-      isDeclUsed (Member _ visibility nm _ _) = isKeyUsed (mid, nm, visibility)-      isDeclUsed (Require _ _ (Right midRef)) = midRef `S.member` modulesReferenced-      isDeclUsed _ = True--      isKeyUsed :: Key -> Bool-      isKeyUsed k-        | Just me <- vertexFor k = me `S.member` reachableSet-        | otherwise = False--      modulesReferenced :: S.Set ModuleIdentifier-      modulesReferenced = fold $ M.lookup mid moduleReferenceMap---- | Topologically sort the module dependency graph, so that when we generate code, modules can be--- defined in the right order.-sortModules :: [Module] -> [Module]-sortModules modules = map (\v -> case nodeFor v of (n, _, _) -> n) (reverse (topSort graph))-  where-  (graph, nodeFor, _) = graphFromEdges $ do-    m@(Module mid _ els) <- modules-    return (m, mid, mapMaybe getKey els)--  getKey :: ModuleElement -> Maybe ModuleIdentifier-  getKey (Require _ _ (Right mi)) = Just mi-  getKey _ = Nothing---- | A module is empty if it contains no exported members (in other words,--- if the only things left after dead code elimination are module imports and--- "other" foreign code).------ If a module is empty, we don't want to generate code for it.-isModuleEmpty :: Module -> Bool-isModuleEmpty (Module _ _ els) = all isElementEmpty els-  where-  isElementEmpty :: ModuleElement -> Bool-  isElementEmpty (ExportsList exps) = null exps-  isElementEmpty Require{} = True-  isElementEmpty (Other _) = True-  isElementEmpty (Skip _) = True-  isElementEmpty _ = False---- | Generate code for a set of modules, including a call to main().------ Modules get defined on the global PS object, as follows:------     var PS = { };---     (function(exports) {---       ...---     })(PS["Module.Name"] = PS["Module.Name"] || {});------ In particular, a module and its foreign imports share the same namespace inside PS.--- This saves us from having to generate unique names for a module and its foreign imports,--- and is safe since a module shares a namespace with its foreign imports in PureScript as well--- (so there is no way to have overlaps in code generated by the compiler).-codeGen :: Maybe String -- ^ main module-        -> String -- ^ namespace-        -> [Module] -- ^ input modules-        -> Maybe String -- ^ output filename-        -> (Maybe SourceMapping, String)-codeGen optionsMainModule optionsNamespace ms outFileOpt = (fmap sourceMapping outFileOpt, rendered)-  where-  rendered = renderToString (JSAstProgram (prelude : concatMap fst modulesJS ++ maybe [] runMain optionsMainModule) JSNoAnnot)--  sourceMapping :: String -> SourceMapping-  sourceMapping outFile = SourceMapping {-      smFile = outFile,-      smSourceRoot = Nothing,-      smMappings = concat $-        zipWith3 (\file (pos :: Int) positions ->-          map (\(porig, pgen) -> Mapping {-                mapOriginal = Just (Pos (fromIntegral $ porig + 1) 0)-              , mapSourceFile = pathToFile <$> file-              , mapGenerated = Pos (fromIntegral $ pos + pgen) 0-              , mapName = Nothing-              })-            (offsets (0,0) (Right 1 : positions)))-          moduleFns-          (scanl (+) (3 + moduleLength [prelude]) (map (3+) moduleLengths)) -- 3 lines between each module & at top-          (map snd modulesJS)-    }-    where-      pathToFile = makeRelative (takeDirectory outFile)--      offsets (m, n) (Left d:rest) = offsets (m+d, n) rest-      offsets (m, n) (Right d:rest) = map ((m+) &&& (n+)) [0 .. d - 1] ++ offsets (m+d, n+d) rest-      offsets _ _ = []--  moduleLength :: [JSStatement] -> Int-  moduleLength = everything (+) (mkQ 0 countw)-    where-      countw :: CommentAnnotation -> Int-      countw (WhiteSpace _ s) = length (filter (== '\n') s)-      countw _ = 0--  moduleLengths :: [Int]-  moduleLengths = map (sum . map (either (const 0) id) . snd) modulesJS-  moduleFns = map (\(Module _ fn _) -> fn) ms--  modulesJS = map moduleToJS ms--  moduleToJS :: Module -> ([JSStatement], [Either Int Int])-  moduleToJS (Module mid _ ds) = (wrap mid (indent (concat jsDecls)), lengths)-    where-    (jsDecls, lengths) = unzip $ map declToJS ds--    withLength :: [JSStatement] -> ([JSStatement], Either Int Int)-    withLength n = (n, Right $ moduleLength n)--    declToJS :: ModuleElement -> ([JSStatement], Either Int Int)-    declToJS (Member n _ _ _ _) = withLength [n]-    declToJS (Other n) = withLength [n]-    declToJS (Skip n) = ([], Left $ moduleLength [n])-    declToJS (Require _ nm req) = withLength-      [-        JSVariable lfsp-          (cList [-            JSVarInitExpression (JSIdentifier sp nm)-              (JSVarInit sp $ either require (innerModuleReference sp . moduleName) req )-          ]) (JSSemi JSNoAnnot)-      ]-    declToJS (ExportsList exps) = withLength $ map toExport exps--      where--      toExport :: (ExportType, String, JSExpression, [Key]) -> JSStatement-      toExport (_, nm, val, _) =-        JSAssignStatement-          (JSMemberSquare (JSIdentifier lfsp "exports") JSNoAnnot-            (str nm) JSNoAnnot)-          (JSAssign sp)-          val-          (JSSemi JSNoAnnot)--  -- comma lists are reverse-consed-  cList :: [a] -> JSCommaList a-  cList [] = JSLNil-  cList [x] = JSLOne x-  cList l = go $ reverse l-    where-      go [x] = JSLOne x-      go (h:t)= JSLCons (go t) JSNoAnnot h-      go [] = error "Invalid case in comma-list"--  indent :: [JSStatement] -> [JSStatement]-  indent = everywhere (mkT squash)-    where-    squash JSNoAnnot = JSAnnot (TokenPn 0 0 2) []-    squash (JSAnnot pos ann) = JSAnnot (keepCol pos) (map splat ann)-    squash JSAnnotSpace = JSAnnot (TokenPn 0 0 2) []--    splat (CommentA pos s) = CommentA (keepCol pos) s-    splat (WhiteSpace pos w) = WhiteSpace (keepCol pos) w-    splat ann = ann--    keepCol (TokenPn _ _ c) = TokenPn 0 0 (if c >= 0 then c + 2 else 2)--  prelude :: JSStatement-  prelude = JSVariable (JSAnnot tokenPosnEmpty [ CommentA tokenPosnEmpty $ "// Generated by purs bundle " ++ showVersion Paths.version-                                               , WhiteSpace tokenPosnEmpty "\n" ])-              (cList [-                JSVarInitExpression (JSIdentifier sp optionsNamespace)-                  (JSVarInit sp (emptyObj sp))-              ]) (JSSemi JSNoAnnot)--  require :: String -> JSExpression-  require mn =-    JSMemberExpression (JSIdentifier JSNoAnnot "require") JSNoAnnot (cList [ str mn ]) JSNoAnnot--  moduleReference :: JSAnnot -> String -> JSExpression-  moduleReference a mn =-    JSMemberSquare (JSIdentifier a optionsNamespace) JSNoAnnot-      (str mn) JSNoAnnot--  innerModuleReference :: JSAnnot -> String -> JSExpression-  innerModuleReference a mn =-    JSMemberSquare (JSIdentifier a "$PS") JSNoAnnot-      (str mn) JSNoAnnot---  str :: String -> JSExpression-  str s = JSStringLiteral JSNoAnnot $ "\"" ++ s ++ "\""---  emptyObj :: JSAnnot -> JSExpression-  emptyObj a = JSObjectLiteral a (JSCTLNone JSLNil) JSNoAnnot--  initializeObject :: JSAnnot -> (JSAnnot -> String -> JSExpression) -> String -> JSExpression-  initializeObject a makeReference mn =-    JSAssignExpression (makeReference a mn) (JSAssign sp)-    $ JSExpressionBinary (makeReference sp mn) (JSBinOpOr sp)-    $ emptyObj sp--  -- Like `somewhere`, but stops after the first successful transformation-  firstwhere :: MonadPlus m => GenericM m -> GenericM m-  firstwhere f x = f x `mplus` gmapMo (firstwhere f) x--  prependWhitespace :: String -> [JSStatement] -> [JSStatement]-  prependWhitespace val = fromMaybe <*> firstwhere (mkMp $ Just . reannotate)-    where-    reannotate (JSAnnot rpos annots) = JSAnnot rpos (ws : annots)-    reannotate _ = JSAnnot tokenPosnEmpty [ws]--    ws = WhiteSpace tokenPosnEmpty val--  iife :: [JSStatement] -> String -> JSExpression -> JSStatement-  iife body param arg =-    JSMethodCall (JSExpressionParen lf (JSFunctionExpression JSNoAnnot JSIdentNone JSNoAnnot (JSLOne (JSIdentifier JSNoAnnot param)) JSNoAnnot-                                                             (JSBlock sp (prependWhitespace "\n  " body) lf))-                                    JSNoAnnot)-                 JSNoAnnot-                 (JSLOne arg)-                 JSNoAnnot-                 (JSSemi JSNoAnnot)--  wrap :: ModuleIdentifier -> [JSStatement] -> [JSStatement]-  wrap (ModuleIdentifier mn mtype) ds =-    case mtype of-      Regular -> [iife (addModuleExports ds) "$PS" (JSIdentifier JSNoAnnot optionsNamespace)]-      Foreign -> [iife ds "exports" (initializeObject JSNoAnnot moduleReference mn)]-    where-      -- Insert the exports var after a directive prologue, if one is present.-      -- Per ECMA-262 5.1, "A Directive Prologue is the longest sequence of-      -- ExpressionStatement productions [...] where each ExpressionStatement-      -- [...] consists entirely of a StringLiteral [...]."-      -- (http://ecma-international.org/ecma-262/5.1/#sec-14.1)-      addModuleExports :: [JSStatement] -> [JSStatement]-      addModuleExports (x:xs) | isDirective x = x : addModuleExports xs-      addModuleExports xs-        = JSExpressionStatement (initializeObject lfsp innerModuleReference mn) (JSSemi JSNoAnnot)-        : JSVariable lfsp (JSLOne $ JSVarInitExpression (JSIdentifier sp "exports") $ JSVarInit sp (innerModuleReference sp mn)) (JSSemi JSNoAnnot)-        : xs--      isDirective (JSExpressionStatement (JSStringLiteral _ _) _) = True-      isDirective _ = False--  runMain :: String -> [JSStatement]-  runMain mn =-    [JSMethodCall-      (JSMemberDot (moduleReference lf mn) JSNoAnnot-        (JSIdentifier JSNoAnnot "main"))-      JSNoAnnot (cList []) JSNoAnnot (JSSemi JSNoAnnot)]--  lf :: JSAnnot-  lf = JSAnnot tokenPosnEmpty [ WhiteSpace tokenPosnEmpty "\n" ]---  lfsp :: JSAnnot-  lfsp = JSAnnot tokenPosnEmpty [ WhiteSpace tokenPosnEmpty "\n  " ]--  sp :: JSAnnot-  sp = JSAnnot tokenPosnEmpty [ WhiteSpace tokenPosnEmpty " " ]---- | The bundling function.--- This function performs dead code elimination, filters empty modules--- and generates and prints the final JavaScript bundle.-bundleSM :: (MonadError ErrorMessage m)-       => [(ModuleIdentifier, Maybe FilePath, String)] -- ^ The input modules.  Each module should be javascript rendered from the compiler.-       -> [ModuleIdentifier] -- ^ Entry points.  These module identifiers are used as the roots for dead-code elimination-       -> Maybe String -- ^ An optional main module.-       -> String -- ^ The namespace (e.g. PS).-       -> Maybe FilePath -- ^ The output file name (if there is one - in which case generate source map)-       -> Maybe ([Module] -> m ()) -- ^ Optionally report the parsed modules prior to DCE -- used by "bundle --debug"-       -> m (Maybe SourceMapping, String)-bundleSM inputStrs entryPoints mainModule namespace outFilename reportRawModules = do-  let mid (a,_,_) = a-  forM_ mainModule $ \mname ->-    when (mname `notElem` map (moduleName . mid) inputStrs) (throwError (MissingMainModule mname))-  forM_ entryPoints $ \mIdent ->-    when (mIdent `notElem` map mid inputStrs) (throwError (MissingEntryPoint (moduleName mIdent)))-  input <- forM inputStrs $ \(ident, filename, js) -> do-                ast <- either (throwError . ErrorInModule ident . UnableToParseModule) pure $ parse js (moduleName ident)-                return (ident, filename, ast)--  let mids = S.fromList (map (moduleName . mid) input)--  modules <- traverse (fmap withDeps . (\(a,fn,c) -> toModule mids a fn c)) input--  forM_ reportRawModules ($ modules)--  let compiled = compile modules entryPoints-      sorted   = sortModules (filter (not . isModuleEmpty) compiled)--  return (codeGen mainModule namespace sorted outFilename)---- | The bundling function.--- This function performs dead code elimination, filters empty modules--- and generates and prints the final JavaScript bundle.-bundle :: (MonadError ErrorMessage m)-       => [(ModuleIdentifier, String)] -- ^ The input modules.  Each module should be javascript rendered from the compiler.-       -> [ModuleIdentifier] -- ^ Entry points.  These module identifiers are used as the roots for dead-code elimination-       -> Maybe String -- ^ An optional main module.-       -> String -- ^ The namespace (e.g. PS).-       -> m String-bundle inputStrs entryPoints mainModule namespace = snd <$> bundleSM (map (\(a,b) -> (a,Nothing,b)) inputStrs) entryPoints mainModule namespace Nothing Nothing
+ src/Language/PureScript/CST/Convert.hs view
@@ -0,0 +1,690 @@+-- | This module contains functions for converting the CST into the core AST. It+-- is mostly boilerplate, and does the job of resolving ranges for all the nodes+-- and attaching comments.++module Language.PureScript.CST.Convert+  ( convertType+  , convertExpr+  , convertBinder+  , convertDeclaration+  , convertImportDecl+  , convertModule+  , sourcePos+  , sourceSpan+  , comment+  , comments+  ) where++import Prelude hiding (take)++import Data.Bifunctor (bimap, first)+import Data.Char (toLower)+import Data.Foldable (foldl', toList)+import Data.Functor (($>))+import qualified Data.List.NonEmpty as NE+import Data.Maybe (isJust, fromJust, mapMaybe)+import qualified Data.Text as Text+import qualified Language.PureScript.AST as AST+import Language.PureScript.AST.Declarations.ChainId (mkChainId)+import qualified Language.PureScript.AST.SourcePos as Pos+import qualified Language.PureScript.Comments as C+import Language.PureScript.Crash (internalError)+import qualified Language.PureScript.Environment as Env+import qualified Language.PureScript.Label as L+import qualified Language.PureScript.Names as N+import Language.PureScript.PSString (mkString, prettyPrintStringJS)+import qualified Language.PureScript.Types as T+import Language.PureScript.CST.Positions+import Language.PureScript.CST.Print (printToken)+import Language.PureScript.CST.Types++comment :: Comment a -> Maybe C.Comment+comment = \case+  Comment t+    | "{-" `Text.isPrefixOf` t -> Just $ C.BlockComment $ Text.drop 2 $ Text.dropEnd 2 t+    | "--" `Text.isPrefixOf` t -> Just $ C.LineComment $ Text.drop 2 t+  _ -> Nothing++comments :: [Comment a] -> [C.Comment]+comments = mapMaybe comment++sourcePos :: SourcePos -> Pos.SourcePos+sourcePos (SourcePos line col) = Pos.SourcePos line col++sourceSpan :: String -> SourceRange -> Pos.SourceSpan+sourceSpan name (SourceRange start end) = Pos.SourceSpan name (sourcePos start) (sourcePos end)++widenLeft :: TokenAnn -> Pos.SourceAnn -> Pos.SourceAnn+widenLeft ann (sp, _) =+  ( Pos.widenSourceSpan (sourceSpan (Pos.spanName sp) $ tokRange ann) sp+  , comments $ tokLeadingComments ann+  )++sourceAnnCommented :: String -> SourceToken -> SourceToken -> Pos.SourceAnn+sourceAnnCommented fileName (SourceToken ann1 _) (SourceToken ann2 _) =+  ( Pos.SourceSpan fileName (sourcePos $ srcStart $ tokRange ann1) (sourcePos $ srcEnd $ tokRange ann2)+  , comments $ tokLeadingComments ann1+  )++sourceAnn :: String -> SourceToken -> SourceToken -> Pos.SourceAnn+sourceAnn fileName (SourceToken ann1 _) (SourceToken ann2 _) =+  ( Pos.SourceSpan fileName (sourcePos $ srcStart $ tokRange ann1) (sourcePos $ srcEnd $ tokRange ann2)+  , []+  )++sourceName :: String -> Name a -> Pos.SourceAnn+sourceName fileName a = sourceAnnCommented fileName (nameTok a) (nameTok a)++sourceQualName :: String -> QualifiedName a -> Pos.SourceAnn+sourceQualName fileName a = sourceAnnCommented fileName (qualTok a) (qualTok a)++moduleName :: Token -> Maybe N.ModuleName+moduleName = \case+  TokLowerName as _ -> go as+  TokUpperName as _ -> go as+  TokSymbolName as _ -> go as+  TokOperator as _ -> go as+  _ -> Nothing+  where+  go [] = Nothing+  go ns = Just $ N.ModuleName $ Text.intercalate "." ns++qualified :: QualifiedName a -> N.Qualified a+qualified q = N.Qualified (qualModule q) (qualName q)++ident :: Ident -> N.Ident+ident = N.Ident . getIdent++convertType :: String -> Type a -> T.SourceType+convertType fileName = go+  where+  goRow (Row labels tl) b = do+    let+      rowTail = case tl of+        Just (_, ty) -> go ty+        Nothing -> T.REmpty $ sourceAnnCommented fileName b b+      rowCons (Labeled a _ ty) c = do+        let ann = sourceAnnCommented fileName (lblTok a) (snd $ typeRange ty)+        T.RCons ann (L.Label $ lblName a) (go ty) c+    case labels of+      Just (Separated h t) ->+        rowCons h $ foldr (rowCons . snd) rowTail t+      Nothing ->+        rowTail++  go = \case+    TypeVar _ a ->+      T.TypeVar (sourceName fileName a) . getIdent $ nameValue a+    TypeConstructor _ a ->+      T.TypeConstructor (sourceQualName fileName a) $ qualified a+    TypeWildcard _ a ->+      T.TypeWildcard (sourceAnnCommented fileName a a) T.UnnamedWildcard+    TypeHole _ a ->+      T.TypeWildcard (sourceName fileName a) . T.HoleWildcard . getIdent $ nameValue a+    TypeString _ a b ->+      T.TypeLevelString (sourceAnnCommented fileName a a) b+    TypeInt _ _ a b ->+      T.TypeLevelInt (sourceAnnCommented fileName a a) b+    TypeRow _ (Wrapped _ row b) ->+      goRow row b+    TypeRecord _ (Wrapped a row b) -> do+      let+        ann = sourceAnnCommented fileName a b+        annRec = sourceAnn fileName a a+      T.TypeApp ann (Env.tyRecord $> annRec) $ goRow row b+    TypeForall _ kw bindings _ ty -> do+      let+        mkForAll a b t = do+          let ann' = widenLeft (tokAnn $ nameTok a) $ T.getAnnForType t+          T.ForAll ann' (getIdent $ nameValue a) b t Nothing+        k (TypeVarKinded (Wrapped _ (Labeled a _ b) _)) = mkForAll a (Just (go b))+        k (TypeVarName a) = mkForAll a Nothing+        ty' = foldr k (go ty) bindings+        ann = widenLeft (tokAnn kw) $ T.getAnnForType ty'+      T.setAnnForType ann ty'+    TypeKinded _ ty _ kd -> do+      let+        ty' = go ty+        kd' = go kd+        ann = Pos.widenSourceAnn (T.getAnnForType ty') (T.getAnnForType kd')+      T.KindedType ann ty' kd'+    TypeApp _ a b -> do+      let+        a' = go a+        b' = go b+        ann = Pos.widenSourceAnn (T.getAnnForType a') (T.getAnnForType b')+      T.TypeApp ann a' b'+    ty@(TypeOp _ _ _ _) -> do+      let+        reassoc op b' a = do+          let+            a'  = go a+            op' = T.TypeOp (sourceQualName fileName op) $ qualified op+            ann = Pos.widenSourceAnn (T.getAnnForType a') (T.getAnnForType b')+          T.BinaryNoParensType ann op' (go a) b'+        loop k = \case+          TypeOp _ a op b -> loop (reassoc op (k b)) a+          expr' -> k expr'+      loop go ty+    TypeOpName _ op -> do+      let rng = qualRange op+      T.TypeOp (uncurry (sourceAnnCommented fileName) rng) (qualified op)+    TypeArr _ a arr b -> do+      let+        a' = go a+        b' = go b+        arr' = Env.tyFunction $> sourceAnnCommented fileName arr arr+        ann = Pos.widenSourceAnn (T.getAnnForType a') (T.getAnnForType b')+      T.TypeApp ann (T.TypeApp ann arr' a') b'+    TypeArrName _ a ->+      Env.tyFunction $> sourceAnnCommented fileName a a+    TypeConstrained _ a _ b -> do+      let+        a' = convertConstraint fileName a+        b' = go b+        ann = Pos.widenSourceAnn (T.constraintAnn a') (T.getAnnForType b')+      T.ConstrainedType ann a' b'+    TypeParens _ (Wrapped a ty b) ->+      T.ParensInType (sourceAnnCommented fileName a b) $ go ty+    ty@(TypeUnaryRow _ _ a) -> do+      let+        a' = go a+        rng = typeRange ty+        ann = uncurry (sourceAnnCommented fileName) rng+      T.setAnnForType ann $ Env.kindRow a'++convertConstraint :: String -> Constraint a -> T.SourceConstraint+convertConstraint fileName = go+  where+  go = \case+    cst@(Constraint _ name args) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ constraintRange cst+      T.Constraint ann (qualified name) [] (convertType fileName <$> args) Nothing+    ConstraintParens _ (Wrapped _ c _) -> go c++convertGuarded :: String -> Guarded a -> [AST.GuardedExpr]+convertGuarded fileName = \case+  Unconditional _ x -> [AST.GuardedExpr [] (convertWhere fileName x)]+  Guarded gs -> (\(GuardedExpr _ ps _ x) -> AST.GuardedExpr (p <$> toList ps) (convertWhere fileName x)) <$> NE.toList gs+  where+  go = convertExpr fileName+  p (PatternGuard Nothing x) = AST.ConditionGuard (go x)+  p (PatternGuard (Just (b, _)) x) = AST.PatternGuard (convertBinder fileName b) (go x)++convertWhere :: String -> Where a -> AST.Expr+convertWhere fileName = \case+  Where expr Nothing -> convertExpr fileName expr+  Where expr (Just (_, bs)) -> do+    let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+    uncurry AST.PositionedValue ann . AST.Let AST.FromWhere (convertLetBinding fileName <$> NE.toList bs) $ convertExpr fileName expr++convertLetBinding :: String -> LetBinding a -> AST.Declaration+convertLetBinding fileName = \case+  LetBindingSignature _ lbl ->+    convertSignature fileName lbl+  binding@(LetBindingName _ fields) -> do+    let ann = uncurry (sourceAnnCommented fileName) $ letBindingRange binding+    convertValueBindingFields fileName ann fields+  binding@(LetBindingPattern _ a _ b) -> do+    let ann = uncurry (sourceAnnCommented fileName) $ letBindingRange binding+    AST.BoundValueDeclaration ann (convertBinder fileName a) (convertWhere fileName b)++convertExpr :: forall a. String -> Expr a -> AST.Expr+convertExpr fileName = go+  where+  positioned =+    uncurry AST.PositionedValue++  goDoStatement = \case+    stmt@(DoLet _ as) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ doStatementRange stmt+      uncurry AST.PositionedDoNotationElement ann . AST.DoNotationLet $ convertLetBinding fileName <$> NE.toList as+    stmt@(DoDiscard a) -> do+      let ann = uncurry (sourceAnn fileName) $ doStatementRange stmt+      uncurry AST.PositionedDoNotationElement ann . AST.DoNotationValue $ go a+    stmt@(DoBind a _ b) -> do+      let+        ann = uncurry (sourceAnn fileName) $ doStatementRange stmt+        a' = convertBinder fileName a+        b' = go b+      uncurry AST.PositionedDoNotationElement ann $ AST.DoNotationBind a' b'++  go = \case+    ExprHole _ a ->+      positioned (sourceName fileName a) . AST.Hole . getIdent $ nameValue a+    ExprSection _ a ->+      positioned (sourceAnnCommented fileName a a) AST.AnonymousArgument+    ExprIdent _ a -> do+      let ann = sourceQualName fileName a+      positioned ann . AST.Var (fst ann) . qualified $ fmap ident a+    ExprConstructor _ a -> do+      let ann = sourceQualName fileName a+      positioned ann . AST.Constructor (fst ann) $ qualified a+    ExprBoolean _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.Literal (fst ann) $ AST.BooleanLiteral b+    ExprChar _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.Literal (fst ann) $ AST.CharLiteral b+    ExprString _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.Literal (fst ann) . AST.StringLiteral $ b+    ExprNumber _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.Literal (fst ann) $ AST.NumericLiteral b+    ExprArray _ (Wrapped a bs c) -> do+      let+        ann = sourceAnnCommented fileName a c+        vals = case bs of+          Just (Separated x xs) -> go x : (go . snd <$> xs)+          Nothing -> []+      positioned ann . AST.Literal (fst ann) $ AST.ArrayLiteral vals+    ExprRecord z (Wrapped a bs c) -> do+      let+        ann = sourceAnnCommented fileName a c+        lbl = \case+          RecordPun f -> (mkString . getIdent $ nameValue f, go . ExprIdent z $ QualifiedName (nameTok f) Nothing (nameValue f))+          RecordField f _ v -> (lblName f, go v)+        vals = case bs of+          Just (Separated x xs) -> lbl x : (lbl . snd <$> xs)+          Nothing -> []+      positioned ann . AST.Literal (fst ann) $ AST.ObjectLiteral vals+    ExprParens _ (Wrapped a b c) ->+      positioned (sourceAnnCommented fileName a c) . AST.Parens $ go b+    expr@(ExprTyped _ a _ b) -> do+      let+        a' = go a+        b' = convertType fileName b+        ann = (sourceSpan fileName . toSourceRange $ exprRange expr, [])+      positioned ann $ AST.TypedValue True a' b'+    expr@(ExprInfix _ a (Wrapped _ b _) c) -> do+      let ann = (sourceSpan fileName . toSourceRange $ exprRange expr, [])+      positioned ann $ AST.BinaryNoParens (go b) (go a) (go c)+    expr@(ExprOp _ _ _ _) -> do+      let+        ann = uncurry (sourceAnn fileName) $ exprRange expr+        reassoc op b a = do+          let op' = AST.Op (sourceSpan fileName . toSourceRange $ qualRange op) $ qualified op+          AST.BinaryNoParens op' (go a) b+        loop k = \case+          ExprOp _ a op b -> loop (reassoc op (k b)) a+          expr' -> k expr'+      positioned ann $ loop go expr+    ExprOpName _ op -> do+      let+        rng = qualRange op+        op' = AST.Op (sourceSpan fileName $ toSourceRange rng) $ qualified op+      positioned (uncurry (sourceAnnCommented fileName) rng) op'+    expr@(ExprNegate _ _ b) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+      positioned ann . AST.UnaryMinus (fst ann) $ go b+    expr@(ExprRecordAccessor _ (RecordAccessor a _ (Separated h t))) -> do+      let+        ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+        field x f = AST.Accessor (lblName f) x+      positioned ann $ foldl' (\x (_, f) -> field x f) (field (go a) h) t+    expr@(ExprRecordUpdate _ a b) -> do+      let+        ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+        k (RecordUpdateLeaf f _ x) = (lblName f, AST.Leaf $ go x)+        k (RecordUpdateBranch f xs) = (lblName f, AST.Branch $ toTree xs)+        toTree (Wrapped _ xs _) = AST.PathTree . AST.AssocList . map k $ toList xs+      positioned ann . AST.ObjectUpdateNested (go a) $ toTree b+    expr@(ExprApp _ a b) -> do+      let ann = uncurry (sourceAnn fileName) $ exprRange expr+      positioned ann $ AST.App (go a) (go b)+    expr@(ExprLambda _ (Lambda _ as _ b)) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+      positioned ann+        . AST.Abs (convertBinder fileName (NE.head as))+        . foldr (AST.Abs . convertBinder fileName) (go b)+        $ NE.tail as+    expr@(ExprIf _ (IfThenElse _ a _ b _ c)) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+      positioned ann $ AST.IfThenElse (go a) (go b) (go c)+    expr@(ExprCase _ (CaseOf _ as _ bs)) -> do+      let+        ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+        as' = go <$> toList as+        bs' = uncurry AST.CaseAlternative . bimap (map (convertBinder fileName) . toList) (convertGuarded fileName) <$> NE.toList bs+      positioned ann $ AST.Case as' bs'+    expr@(ExprLet _ (LetIn _ as _ b)) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+      positioned ann . AST.Let AST.FromLet (convertLetBinding fileName <$> NE.toList as) $ go b+    -- expr@(ExprWhere _ (Where a _ bs)) -> do+    --   let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+    --   positioned ann . AST.Let AST.FromWhere (goLetBinding <$> bs) $ go a+    expr@(ExprDo _ (DoBlock kw stmts)) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+      positioned ann . AST.Do (moduleName $ tokValue kw) $ goDoStatement <$> NE.toList stmts+    expr@(ExprAdo _ (AdoBlock kw stms _ a)) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ exprRange expr+      positioned ann . AST.Ado (moduleName $ tokValue kw) (goDoStatement <$> stms) $ go a++convertBinder :: String -> Binder a -> AST.Binder+convertBinder fileName = go+  where+  positioned =+    uncurry AST.PositionedBinder++  go = \case+    BinderWildcard _ a ->+      positioned (sourceAnnCommented fileName a a) AST.NullBinder+    BinderVar _ a -> do+      let ann = sourceName fileName a+      positioned ann . AST.VarBinder (fst ann) . ident $ nameValue a+    binder@(BinderNamed _ a _ b) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ binderRange binder+      positioned ann . AST.NamedBinder (fst ann) (ident $ nameValue a) $ go b+    binder@(BinderConstructor _ a bs) -> do+      let ann = uncurry (sourceAnnCommented fileName) $ binderRange binder+      positioned ann . AST.ConstructorBinder (fst ann) (qualified a) $ go <$> bs+    BinderBoolean _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.LiteralBinder (fst ann) $ AST.BooleanLiteral b+    BinderChar _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.LiteralBinder (fst ann) $ AST.CharLiteral b+    BinderString _ a b -> do+      let ann = sourceAnnCommented fileName a a+      positioned ann . AST.LiteralBinder (fst ann) . AST.StringLiteral $ b+    BinderNumber _ n a b -> do+      let+        ann = sourceAnnCommented fileName a a+        b'+          | isJust n = bimap negate negate b+          | otherwise = b+      positioned ann . AST.LiteralBinder (fst ann) $ AST.NumericLiteral b'+    BinderArray _ (Wrapped a bs c) -> do+      let+        ann = sourceAnnCommented fileName a c+        vals = case bs of+          Just (Separated x xs) -> go x : (go . snd <$> xs)+          Nothing -> []+      positioned ann . AST.LiteralBinder (fst ann) $ AST.ArrayLiteral vals+    BinderRecord z (Wrapped a bs c) -> do+      let+        ann = sourceAnnCommented fileName a c+        lbl = \case+          RecordPun f -> (mkString . getIdent $ nameValue f, go $ BinderVar z f)+          RecordField f _ v -> (lblName f, go v)+        vals = case bs of+          Just (Separated x xs) -> lbl x : (lbl . snd <$> xs)+          Nothing -> []+      positioned ann . AST.LiteralBinder (fst ann) $ AST.ObjectLiteral vals+    BinderParens _ (Wrapped a b c) ->+      positioned (sourceAnnCommented fileName a c) . AST.ParensInBinder $ go b+    binder@(BinderTyped _ a _ b) -> do+      let+        a' = go a+        b' = convertType fileName b+        ann = (sourceSpan fileName . toSourceRange $ binderRange binder, [])+      positioned ann $ AST.TypedBinder b' a'+    binder@(BinderOp _ _ _ _) -> do+      let+        ann = uncurry (sourceAnn fileName) $ binderRange binder+        reassoc op b a = do+          let op' = AST.OpBinder (sourceSpan fileName . toSourceRange $ qualRange op) $ qualified op+          AST.BinaryNoParensBinder op' (go a) b+        loop k = \case+          BinderOp _ a op b -> loop (reassoc op (k b)) a+          binder' -> k binder'+      positioned ann $ loop go binder++convertDeclaration :: String -> Declaration a -> [AST.Declaration]+convertDeclaration fileName decl = case decl of+  DeclData _ (DataHead _ a vars) bd -> do+    let+      ctrs :: SourceToken -> DataCtor a -> [(SourceToken, DataCtor a)] -> [AST.DataConstructorDeclaration]+      ctrs st (DataCtor _ name fields) tl+        = AST.DataConstructorDeclaration (sourceAnnCommented fileName st (nameTok name)) (nameValue name) (zip ctrFields $ convertType fileName <$> fields)+        : (case tl of+            [] -> []+            (st', ctor) : tl' -> ctrs st' ctor tl'+          )+    pure $ AST.DataDeclaration ann Env.Data (nameValue a) (goTypeVar <$> vars) (maybe [] (\(st, Separated hd tl) -> ctrs st hd tl) bd)+  DeclType _ (DataHead _ a vars) _ bd ->+    pure $ AST.TypeSynonymDeclaration ann+      (nameValue a)+      (goTypeVar <$> vars)+      (convertType fileName bd)+  DeclNewtype _ (DataHead _ a vars) st x ys -> do+    let ctrs = [AST.DataConstructorDeclaration (sourceAnnCommented fileName st (snd $ declRange decl)) (nameValue x) [(head ctrFields, convertType fileName ys)]]+    pure $ AST.DataDeclaration ann Env.Newtype (nameValue a) (goTypeVar <$> vars) ctrs+  DeclClass _ (ClassHead _ sup name vars fdeps) bd -> do+    let+      goTyVar (TypeVarKinded (Wrapped _ (Labeled a _ _) _)) = nameValue a+      goTyVar (TypeVarName a) = nameValue a+      vars' = zip (toList $ goTyVar <$> vars) [0..]+      goName = fromJust . flip lookup vars' . nameValue+      goFundep (FundepDetermined _ bs) = Env.FunctionalDependency [] (goName <$> NE.toList bs)+      goFundep (FundepDetermines as _ bs) = Env.FunctionalDependency (goName <$> NE.toList as) (goName <$> NE.toList bs)+      goSig (Labeled n _ ty) = do+        let+          ty' = convertType fileName ty+          ann' = widenLeft (tokAnn $ nameTok n) $ T.getAnnForType ty'+        AST.TypeDeclaration $ AST.TypeDeclarationData ann' (ident $ nameValue n) ty'+    pure $ AST.TypeClassDeclaration ann+      (nameValue name)+      (goTypeVar <$> vars)+      (convertConstraint fileName <$> maybe [] (toList . fst) sup)+      (goFundep <$> maybe [] (toList . snd) fdeps)+      (goSig <$> maybe [] (NE.toList . snd) bd)+  DeclInstanceChain _ insts -> do+    let+      chainId = mkChainId fileName $ startSourcePos $ instKeyword $ instHead $ sepHead insts+      goInst ix inst@(Instance (InstanceHead _ nameSep ctrs cls args) bd) = do+        let ann' = uncurry (sourceAnnCommented fileName) $ instanceRange inst+        AST.TypeInstanceDeclaration ann' chainId ix+          (mkPartialInstanceName nameSep cls args)+          (convertConstraint fileName <$> maybe [] (toList . fst) ctrs)+          (qualified cls)+          (convertType fileName <$> args)+          (AST.ExplicitInstance $ goInstanceBinding <$> maybe [] (NE.toList . snd) bd)+    uncurry goInst <$> zip [0..] (toList insts)+  DeclDerive _ _ new (InstanceHead kw nameSep ctrs cls args) -> do+    let+      chainId = mkChainId fileName $ startSourcePos kw+      name' = mkPartialInstanceName nameSep cls args+      instTy+        | isJust new = AST.NewtypeInstance+        | otherwise = AST.DerivedInstance+    pure $ AST.TypeInstanceDeclaration ann chainId 0 name'+      (convertConstraint fileName <$> maybe [] (toList . fst) ctrs)+      (qualified cls)+      (convertType fileName <$> args)+      instTy+  DeclKindSignature _ kw (Labeled name _ ty) -> do+    let+      kindFor = case tokValue kw of+        TokLowerName [] "data" -> AST.DataSig+        TokLowerName [] "newtype" -> AST.NewtypeSig+        TokLowerName [] "type" -> AST.TypeSynonymSig+        TokLowerName [] "class" -> AST.ClassSig+        tok -> internalError $ "Invalid kind signature keyword " <> Text.unpack (printToken tok)+    pure . AST.KindDeclaration ann kindFor (nameValue name) $ convertType fileName ty+  DeclSignature _ lbl ->+    pure $ convertSignature fileName lbl+  DeclValue _ fields ->+    pure $ convertValueBindingFields fileName ann fields+  DeclFixity _ (FixityFields (_, kw) (_, prec) fxop) -> do+    let+      assoc =  case kw of+        Infix  -> AST.Infix+        Infixr -> AST.Infixr+        Infixl -> AST.Infixl+      fixity = AST.Fixity assoc prec+    pure $ AST.FixityDeclaration ann $ case fxop of+      FixityValue name _ op -> do+        Left $ AST.ValueFixity fixity (first ident <$> qualified name) (nameValue op)+      FixityType _ name _ op ->+        Right $ AST.TypeFixity fixity (qualified name) (nameValue op)+  DeclForeign _ _ _ frn ->+    pure $ case frn of+      ForeignValue (Labeled a _ b) ->+        AST.ExternDeclaration ann (ident $ nameValue a) $ convertType fileName b+      ForeignData _ (Labeled a _ b) ->+        AST.ExternDataDeclaration ann (nameValue a) $ convertType fileName b+      ForeignKind _ a ->+        AST.DataDeclaration ann Env.Data (nameValue a) [] []+  DeclRole _ _ _ name roles ->+    pure $ AST.RoleDeclaration $+      AST.RoleDeclarationData ann (nameValue name) (roleValue <$> NE.toList roles)+  where+  ann =+    uncurry (sourceAnnCommented fileName) $ declRange decl++  startSourcePos :: SourceToken -> Pos.SourcePos+  startSourcePos = sourcePos . srcStart . tokRange . tokAnn++  mkPartialInstanceName :: Maybe (Name Ident, SourceToken) -> QualifiedName (N.ProperName 'N.ClassName) -> [Type a] -> Either Text.Text N.Ident+  mkPartialInstanceName nameSep cls args =+    maybe (Left genName) (Right . ident . nameValue . fst) nameSep+    where+      -- truncate to 25 chars to reduce verbosity+      -- of name and still keep it readable+      -- name will be used to create a GenIdent+      -- in desugaring process+      genName :: Text.Text+      genName = Text.take 25 (className <> typeArgs)++      className :: Text.Text+      className+        = foldMap (uncurry Text.cons . first toLower)+        . Text.uncons+        . N.runProperName+        $ qualName cls++      typeArgs :: Text.Text+      typeArgs = foldMap argName args++      argName :: Type a -> Text.Text+      argName = \case+        -- These are only useful to disambiguate between overlapping instances+        -- but they’re disallowed outside of instance chains. Since we’re+        -- avoiding name collisions with unique identifiers anyway,+        -- we don't need to render this constructor.+        TypeVar{} -> ""+        TypeConstructor _ qn -> N.runProperName $ qualName qn+        TypeOpName _ qn -> N.runOpName $ qualName qn+        TypeString _ _ ps -> prettyPrintStringJS ps+        TypeInt _ _ _ nt -> Text.pack $ show nt++        -- Typed holes are disallowed in instance heads+        TypeHole{} -> ""+        TypeParens _ t -> argName $ wrpValue t+        TypeKinded _ t1 _ t2 -> argName t1 <> argName t2+        TypeRecord _ _ -> "Record"+        TypeRow _ _ -> "Row"+        TypeArrName _ _ -> "Function"+        TypeWildcard{} -> "_"++        -- Polytypes are disallowed in instance heads+        TypeForall{} -> ""+        TypeApp _ t1 t2 -> argName t1 <> argName t2+        TypeOp _ t1 op t2 ->+          argName t1 <> N.runOpName (qualName op) <> argName t2+        TypeArr _ t1 _ t2 -> argName t1 <> "Function" <> argName t2+        TypeConstrained{} -> ""+        TypeUnaryRow{} -> "Row"++  goTypeVar = \case+    TypeVarKinded (Wrapped _ (Labeled x _ y) _) -> (getIdent $ nameValue x, Just $ convertType fileName y)+    TypeVarName x -> (getIdent $ nameValue x, Nothing)++  goInstanceBinding = \case+    InstanceBindingSignature _ lbl ->+      convertSignature fileName lbl+    binding@(InstanceBindingName _ fields) -> do+      let ann' = uncurry (sourceAnnCommented fileName) $ instanceBindingRange binding+      convertValueBindingFields fileName ann' fields++convertSignature :: String -> Labeled (Name Ident) (Type a) -> AST.Declaration+convertSignature fileName (Labeled a _ b) = do+  let+    b' = convertType fileName b+    ann = widenLeft (tokAnn $ nameTok a) $ T.getAnnForType b'+  AST.TypeDeclaration $ AST.TypeDeclarationData ann (ident $ nameValue a) b'++convertValueBindingFields :: String -> Pos.SourceAnn -> ValueBindingFields a -> AST.Declaration+convertValueBindingFields fileName ann (ValueBindingFields a bs c) = do+  let+    bs' = convertBinder fileName <$> bs+    cs' = convertGuarded fileName c+  AST.ValueDeclaration $ AST.ValueDeclarationData ann (ident $ nameValue a) Env.Public bs' cs'++convertImportDecl+  :: String+  -> ImportDecl a+  -> (Pos.SourceAnn, N.ModuleName, AST.ImportDeclarationType, Maybe N.ModuleName)+convertImportDecl fileName decl@(ImportDecl _ _ modName mbNames mbQual) = do+  let+    ann = uncurry (sourceAnnCommented fileName) $ importDeclRange decl+    importTy = case mbNames of+      Nothing -> AST.Implicit+      Just (hiding, Wrapped _ imps _) -> do+        let imps' = convertImport fileName <$> toList imps+        if isJust hiding+          then AST.Hiding imps'+          else AST.Explicit imps'+  (ann, nameValue modName, importTy, nameValue . snd <$> mbQual)++convertImport :: String -> Import a -> AST.DeclarationRef+convertImport fileName imp = case imp of+  ImportValue _ a ->+    AST.ValueRef ann . ident $ nameValue a+  ImportOp _ a ->+    AST.ValueOpRef ann $ nameValue a+  ImportType _ a mb -> do+    let+      ctrs = case mb of+        Nothing -> Just []+        Just (DataAll _ _) -> Nothing+        Just (DataEnumerated _ (Wrapped _ Nothing _)) -> Just []+        Just (DataEnumerated _ (Wrapped _ (Just idents) _)) ->+          Just . map nameValue $ toList idents+    AST.TypeRef ann (nameValue a) ctrs+  ImportTypeOp _ _ a ->+    AST.TypeOpRef ann $ nameValue a+  ImportClass _ _ a ->+    AST.TypeClassRef ann $ nameValue a+  where+  ann = sourceSpan fileName . toSourceRange $ importRange imp++convertExport :: String -> Export a -> AST.DeclarationRef+convertExport fileName export = case export of+  ExportValue _ a ->+    AST.ValueRef ann . ident $ nameValue a+  ExportOp _ a ->+    AST.ValueOpRef ann $ nameValue a+  ExportType _ a mb -> do+    let+      ctrs = case mb of+        Nothing -> Just []+        Just (DataAll _ _) -> Nothing+        Just (DataEnumerated _ (Wrapped _ Nothing _)) -> Just []+        Just (DataEnumerated _ (Wrapped _ (Just idents) _)) ->+          Just . map nameValue $ toList idents+    AST.TypeRef ann (nameValue a) ctrs+  ExportTypeOp _ _ a ->+    AST.TypeOpRef ann $ nameValue a+  ExportClass _ _ a ->+    AST.TypeClassRef ann $ nameValue a+  ExportModule _ _ a ->+    AST.ModuleRef ann (nameValue a)+  where+  ann = sourceSpan fileName . toSourceRange $ exportRange export++convertModule :: String -> Module a -> AST.Module+convertModule fileName module'@(Module _ _ modName exps _ imps decls _) = do+  let+    ann = uncurry (sourceAnnCommented fileName) $ moduleRange module'+    imps' = importCtr. convertImportDecl fileName <$> imps+    decls' = convertDeclaration fileName =<< decls+    exps' = map (convertExport fileName) . toList . wrpValue <$> exps+  uncurry AST.Module ann (nameValue modName) (imps' <> decls') exps'+  where+  importCtr (a, b, c, d) = AST.ImportDeclaration a b c d++ctrFields :: [N.Ident]+ctrFields = [N.Ident ("value" <> Text.pack (show (n :: Integer))) | n <- [0..]]
+ src/Language/PureScript/CST/Errors.hs view
@@ -0,0 +1,198 @@+module Language.PureScript.CST.Errors+  ( ParserErrorInfo(..)+  , ParserErrorType(..)+  , ParserWarningType(..)+  , ParserError+  , ParserWarning+  , prettyPrintError+  , prettyPrintErrorMessage+  , prettyPrintWarningMessage+  ) where++import Prelude++import qualified Data.Text as Text+import Data.Char (isSpace, toUpper)+import Language.PureScript.CST.Layout+import Language.PureScript.CST.Print+import Language.PureScript.CST.Types+import Text.Printf (printf)++data ParserErrorType+  = ErrWildcardInType+  | ErrConstraintInKind+  | ErrHoleInType+  | ErrExprInBinder+  | ErrExprInDeclOrBinder+  | ErrExprInDecl+  | ErrBinderInDecl+  | ErrRecordUpdateInCtr+  | ErrRecordPunInUpdate+  | ErrRecordCtrInUpdate+  | ErrTypeInConstraint+  | ErrElseInDecl+  | ErrInstanceNameMismatch+  | ErrUnknownFundep+  | ErrImportInDecl+  | ErrGuardInLetBinder+  | ErrKeywordVar+  | ErrKeywordSymbol+  | ErrQuotedPun+  | ErrToken+  | ErrLineFeedInString+  | ErrAstralCodePointInChar+  | ErrCharEscape+  | ErrNumberOutOfRange+  | ErrLeadingZero+  | ErrExpectedFraction+  | ErrExpectedExponent+  | ErrExpectedHex+  | ErrReservedSymbol+  | ErrCharInGap Char+  | ErrModuleName+  | ErrQualifiedName+  | ErrEmptyDo+  | ErrLexeme (Maybe String) [String]+  | ErrConstraintInForeignImportSyntax+  | ErrEof+  | ErrCustom String+  deriving (Show, Eq, Ord)++data ParserWarningType+  = WarnDeprecatedRowSyntax+  | WarnDeprecatedForeignKindSyntax+  | WarnDeprecatedKindImportSyntax+  | WarnDeprecatedKindExportSyntax+  | WarnDeprecatedCaseOfOffsideSyntax+  deriving (Show, Eq, Ord)++data ParserErrorInfo a = ParserErrorInfo+  { errRange :: SourceRange+  , errToks :: [SourceToken]+  , errStack :: LayoutStack+  , errType :: a+  } deriving (Show, Eq)++type ParserError = ParserErrorInfo ParserErrorType+type ParserWarning = ParserErrorInfo ParserWarningType++prettyPrintError :: ParserError -> String+prettyPrintError pe@ParserErrorInfo { errRange } =+  prettyPrintErrorMessage pe <> " at " <> errPos+  where+  errPos = case errRange of+    SourceRange (SourcePos line col) _ ->+      "line " <> show line <> ", column " <> show col++prettyPrintErrorMessage :: ParserError -> String+prettyPrintErrorMessage ParserErrorInfo {..} = case errType of+  ErrWildcardInType ->+    "Unexpected wildcard in type; type wildcards are only allowed in value annotations"+  ErrConstraintInKind ->+    "Unsupported constraint in kind; constraints are only allowed in value annotations"+  ErrHoleInType ->+    "Unexpected hole in type; type holes are only allowed in value annotations"+  ErrExprInBinder ->+    "Expected pattern, saw expression"+  ErrExprInDeclOrBinder ->+    "Expected declaration or pattern, saw expression"+  ErrExprInDecl ->+    "Expected declaration, saw expression"+  ErrBinderInDecl ->+    "Expected declaration, saw pattern"+  ErrRecordUpdateInCtr ->+    "Expected ':', saw '='"+  ErrRecordPunInUpdate ->+    "Expected record update, saw pun"+  ErrRecordCtrInUpdate ->+    "Expected '=', saw ':'"+  ErrTypeInConstraint ->+    "Expected constraint, saw type"+  ErrElseInDecl ->+    "Expected declaration, saw 'else'"+  ErrInstanceNameMismatch ->+    "All instances in a chain must implement the same type class"+  ErrUnknownFundep ->+    "Unknown type variable in functional dependency"+  ErrImportInDecl ->+    "Expected declaration, saw 'import'"+  ErrGuardInLetBinder ->+    "Unexpected guard in let pattern"+  ErrKeywordVar ->+    "Expected variable, saw keyword"+  ErrKeywordSymbol ->+    "Expected symbol, saw reserved symbol"+  ErrQuotedPun ->+    "Unexpected quoted label in record pun, perhaps due to a missing ':'"+  ErrEof ->+    "Unexpected end of input"+  ErrLexeme (Just (hd : _)) _ | isSpace hd ->+    "Illegal whitespace character " <> displayCodePoint hd+  ErrLexeme (Just a) _ ->+    "Unexpected " <> a+  ErrLineFeedInString ->+    "Unexpected line feed in string literal"+  ErrAstralCodePointInChar ->+    "Illegal astral code point in character literal"+  ErrCharEscape ->+    "Illegal character escape code"+  ErrNumberOutOfRange ->+    "Number literal is out of range"+  ErrLeadingZero ->+    "Unexpected leading zeros"+  ErrExpectedFraction ->+    "Expected fraction"+  ErrExpectedExponent ->+    "Expected exponent"+  ErrExpectedHex ->+    "Expected hex digit"+  ErrReservedSymbol ->+    "Unexpected reserved symbol"+  ErrCharInGap ch ->+    "Unexpected character '" <> [ch] <> "' in gap"+  ErrModuleName ->+    "Invalid module name; underscores and primes are not allowed in module names"+  ErrQualifiedName ->+    "Unexpected qualified name"+  ErrEmptyDo ->+    "Expected do statement"+  ErrLexeme _ _ ->+    basicError+  ErrConstraintInForeignImportSyntax ->+    "Constraints are not allowed in foreign imports. Omit the constraint instead and update the foreign module accordingly."+  ErrToken+    | SourceToken _ (TokLeftArrow _) : _ <- errToks ->+        "Unexpected \"<-\" in expression, perhaps due to a missing 'do' or 'ado' keyword"+  ErrToken ->+    basicError+  ErrCustom err ->+    err++  where+  basicError = case errToks of+    tok : _ -> basicTokError (tokValue tok)+    [] -> "Unexpected input"++  basicTokError = \case+    TokLayoutStart -> "Unexpected or mismatched indentation"+    TokLayoutSep   -> "Unexpected or mismatched indentation"+    TokLayoutEnd   -> "Unexpected or mismatched indentation"+    TokEof         -> "Unexpected end of input"+    tok            -> "Unexpected token '" <> Text.unpack (printToken tok) <> "'"++  displayCodePoint :: Char -> String+  displayCodePoint x =+    "U+" <> map toUpper (printf "%0.4x" (fromEnum x))++prettyPrintWarningMessage :: ParserWarning -> String+prettyPrintWarningMessage ParserErrorInfo {..} = case errType of+  WarnDeprecatedRowSyntax ->+    "Unary '#' syntax for row kinds is deprecated and will be removed in a future release. Use the 'Row' kind instead."+  WarnDeprecatedForeignKindSyntax ->+    "Foreign kind imports are deprecated and will be removed in a future release. Use empty 'data' instead."+  WarnDeprecatedKindImportSyntax ->+    "Kind imports are deprecated and will be removed in a future release. Omit the 'kind' keyword instead."+  WarnDeprecatedKindExportSyntax ->+    "Kind exports are deprecated and will be removed in a future release. Omit the 'kind' keyword instead."+  WarnDeprecatedCaseOfOffsideSyntax ->+    "Dedented expressions in case branches are deprecated and will be removed in a future release. Indent the branch's expression past it's binder instead."
+ src/Language/PureScript/CST/Flatten.hs view
@@ -0,0 +1,312 @@+module Language.PureScript.CST.Flatten where++import Prelude++import Data.DList (DList)+import Language.PureScript.CST.Types+import Language.PureScript.CST.Positions++flattenModule :: Module a -> DList SourceToken+flattenModule m@(Module _ a b c d e f g) =+  pure a <>+  flattenName b <>+  foldMap (flattenWrapped (flattenSeparated flattenExport)) c <>+  pure d <>+  foldMap flattenImportDecl e <>+  foldMap flattenDeclaration f <>+  pure (SourceToken (TokenAnn eofRange g []) TokEof)+  where+    (_, endTkn) = moduleRange m+    eofPos = advanceLeading (srcEnd (srcRange endTkn)) g+    eofRange = SourceRange eofPos eofPos++flattenDataHead :: DataHead a -> DList SourceToken+flattenDataHead (DataHead a b c) = pure a <> flattenName b <> foldMap flattenTypeVarBinding c++flattenDataCtor :: DataCtor a -> DList SourceToken+flattenDataCtor (DataCtor _ a b) = flattenName a <> foldMap flattenType b++flattenClassHead :: ClassHead a -> DList SourceToken+flattenClassHead (ClassHead a b c d e) =+  pure a <>+  foldMap (\(f, g) -> flattenOneOrDelimited flattenConstraint f <> pure g) b <>+  flattenName c <>+  foldMap flattenTypeVarBinding d <>+  foldMap (\(f, g) -> pure f <> flattenSeparated flattenClassFundep g) e++flattenClassFundep :: ClassFundep -> DList SourceToken+flattenClassFundep = \case+  FundepDetermined a b ->+    pure a <> foldMap flattenName b+  FundepDetermines a b c ->+    foldMap flattenName a <> pure b <> foldMap flattenName c++flattenInstance :: Instance a -> DList SourceToken+flattenInstance (Instance a b) =+  flattenInstanceHead a <> foldMap (\(c, d) -> pure c <> foldMap flattenInstanceBinding d) b++flattenInstanceHead :: InstanceHead a -> DList SourceToken+flattenInstanceHead (InstanceHead a b c d e) =+  pure a <>+  foldMap (\(n, s) -> flattenName n <> pure s) b <>+  foldMap (\(g, h) -> flattenOneOrDelimited flattenConstraint g <> pure h) c <>+  flattenQualifiedName d <>+  foldMap flattenType e++flattenInstanceBinding :: InstanceBinding a -> DList SourceToken+flattenInstanceBinding = \case+  InstanceBindingSignature _ a -> flattenLabeled flattenName flattenType a+  InstanceBindingName _ a -> flattenValueBindingFields a++flattenValueBindingFields :: ValueBindingFields a -> DList SourceToken+flattenValueBindingFields (ValueBindingFields a b c) =+  flattenName a <>+  foldMap flattenBinder b <>+  flattenGuarded c++flattenBinder :: Binder a -> DList SourceToken+flattenBinder = \case+  BinderWildcard _ a -> pure a+  BinderVar _ a -> flattenName a+  BinderNamed _ a b c -> flattenName a <> pure b <> flattenBinder c+  BinderConstructor _ a b -> flattenQualifiedName a <> foldMap flattenBinder b+  BinderBoolean _ a _ -> pure a+  BinderChar _ a _ -> pure a+  BinderString _ a _ -> pure a+  BinderNumber _ a b _ -> foldMap pure a <> pure b+  BinderArray _ a -> flattenWrapped (foldMap (flattenSeparated flattenBinder)) a+  BinderRecord _ a ->+    flattenWrapped (foldMap (flattenSeparated (flattenRecordLabeled flattenBinder))) a+  BinderParens _ a -> flattenWrapped flattenBinder a+  BinderTyped _ a b c -> flattenBinder a <> pure b <> flattenType c+  BinderOp _ a b c -> flattenBinder a <> flattenQualifiedName b <> flattenBinder c++flattenRecordLabeled :: (a -> DList SourceToken) -> RecordLabeled a -> DList SourceToken+flattenRecordLabeled f = \case+  RecordPun a -> flattenName a+  RecordField a b c -> flattenLabel a <> pure b <> f c++flattenRecordAccessor :: RecordAccessor a -> DList SourceToken+flattenRecordAccessor (RecordAccessor a b c) =+  flattenExpr a <> pure b <> flattenSeparated flattenLabel c++flattenRecordUpdate :: RecordUpdate a -> DList SourceToken+flattenRecordUpdate = \case+  RecordUpdateLeaf a b c -> flattenLabel a <> pure b <> flattenExpr c+  RecordUpdateBranch a b ->+    flattenLabel a <> flattenWrapped (flattenSeparated flattenRecordUpdate) b++flattenLambda :: Lambda a -> DList SourceToken+flattenLambda (Lambda a b c d) =+  pure a <> foldMap flattenBinder b <> pure c <> flattenExpr d++flattenIfThenElse :: IfThenElse a -> DList SourceToken+flattenIfThenElse (IfThenElse a b c d e f) =+  pure a <> flattenExpr b <> pure c <> flattenExpr d <> pure e <> flattenExpr f++flattenCaseOf :: CaseOf a -> DList SourceToken+flattenCaseOf (CaseOf a b c d) =+  pure a <>+  flattenSeparated flattenExpr b <>+  pure c <>+  foldMap (\(e, f) -> flattenSeparated flattenBinder e <> flattenGuarded f) d++flattenLetIn :: LetIn a -> DList SourceToken+flattenLetIn (LetIn a b c d) =+  pure a <> foldMap flattenLetBinding b <> pure c <> flattenExpr d++flattenDoBlock :: DoBlock a -> DList SourceToken+flattenDoBlock (DoBlock a b) =+  pure a <> foldMap flattenDoStatement b++flattenAdoBlock :: AdoBlock a -> DList SourceToken+flattenAdoBlock (AdoBlock a b c d) =+  pure a <> foldMap flattenDoStatement b <> pure c <> flattenExpr d++flattenDoStatement :: DoStatement a -> DList SourceToken+flattenDoStatement = \case+  DoLet a b -> pure a <> foldMap flattenLetBinding b+  DoDiscard a -> flattenExpr a+  DoBind a b c -> flattenBinder a <> pure b <> flattenExpr c++flattenExpr :: Expr a -> DList SourceToken+flattenExpr = \case+  ExprHole _ a -> flattenName a+  ExprSection _ a -> pure a+  ExprIdent _ a -> flattenQualifiedName a+  ExprConstructor _ a -> flattenQualifiedName a+  ExprBoolean _ a _ -> pure a+  ExprChar _ a _ -> pure a+  ExprString _ a _ -> pure a+  ExprNumber _ a _ -> pure a+  ExprArray _ a -> flattenWrapped (foldMap (flattenSeparated flattenExpr)) a+  ExprRecord _ a ->+    flattenWrapped (foldMap (flattenSeparated (flattenRecordLabeled flattenExpr))) a+  ExprParens _ a -> flattenWrapped flattenExpr a+  ExprTyped _ a b c -> flattenExpr a <> pure b <> flattenType c+  ExprInfix _ a b c -> flattenExpr a <> flattenWrapped flattenExpr b <> flattenExpr c+  ExprOp _ a b c -> flattenExpr a <> flattenQualifiedName b <> flattenExpr c+  ExprOpName _ a -> flattenQualifiedName a+  ExprNegate _ a b -> pure a <> flattenExpr b+  ExprRecordAccessor _ a -> flattenRecordAccessor a+  ExprRecordUpdate _ a b -> flattenExpr a <> flattenWrapped (flattenSeparated flattenRecordUpdate) b+  ExprApp _ a b -> flattenExpr a <> flattenExpr b+  ExprLambda _ a -> flattenLambda a+  ExprIf _ a -> flattenIfThenElse a+  ExprCase _ a -> flattenCaseOf a+  ExprLet _ a -> flattenLetIn a+  ExprDo _ a -> flattenDoBlock a+  ExprAdo _ a -> flattenAdoBlock a++flattenLetBinding :: LetBinding a -> DList SourceToken+flattenLetBinding = \case+  LetBindingSignature _ a -> flattenLabeled flattenName flattenType a+  LetBindingName _ a -> flattenValueBindingFields a+  LetBindingPattern _ a b c -> flattenBinder a <> pure b <> flattenWhere c++flattenWhere :: Where a -> DList SourceToken+flattenWhere (Where a b) =+  flattenExpr a <> foldMap (\(c, d) -> pure c <> foldMap flattenLetBinding d) b++flattenPatternGuard :: PatternGuard a -> DList SourceToken+flattenPatternGuard (PatternGuard a b) =+  foldMap (\(c, d) -> flattenBinder c <> pure d) a <> flattenExpr b++flattenGuardedExpr :: GuardedExpr a -> DList SourceToken+flattenGuardedExpr (GuardedExpr a b c d) =+  pure a <>+  flattenSeparated flattenPatternGuard b <>+  pure c <>+  flattenWhere d++flattenGuarded :: Guarded a -> DList SourceToken+flattenGuarded = \case+  Unconditional a b -> pure a <> flattenWhere b+  Guarded a -> foldMap flattenGuardedExpr a++flattenFixityFields :: FixityFields -> DList SourceToken+flattenFixityFields (FixityFields (a, _) (b, _) c) =+  pure a <> pure b <> flattenFixityOp c++flattenFixityOp :: FixityOp -> DList SourceToken+flattenFixityOp = \case+  FixityValue a b c -> flattenQualifiedName a <> pure b <> flattenName c+  FixityType a b c d -> pure a <> flattenQualifiedName b <> pure c <> flattenName d++flattenForeign :: Foreign a -> DList SourceToken+flattenForeign = \case+  ForeignValue a -> flattenLabeled flattenName flattenType a+  ForeignData a b -> pure a <> flattenLabeled flattenName flattenType b+  ForeignKind a b -> pure a <> flattenName b++flattenRole :: Role -> DList SourceToken+flattenRole = pure . roleTok++flattenDeclaration :: Declaration a -> DList SourceToken+flattenDeclaration = \case+  DeclData _ a b ->+    flattenDataHead a <>+    foldMap (\(t, cs) -> pure t <> flattenSeparated flattenDataCtor cs) b+  DeclType _ a b c ->flattenDataHead a <> pure b <> flattenType c+  DeclNewtype _ a b c d -> flattenDataHead a <> pure b <> flattenName c <> flattenType d+  DeclClass _ a b ->+    flattenClassHead a <>+    foldMap (\(c, d) -> pure c <> foldMap (flattenLabeled flattenName flattenType) d) b+  DeclInstanceChain _ a -> flattenSeparated flattenInstance a+  DeclDerive _ a b c -> pure a <> foldMap pure b <> flattenInstanceHead c+  DeclKindSignature _ a b -> pure a <> flattenLabeled flattenName flattenType b+  DeclSignature _ a -> flattenLabeled flattenName flattenType a+  DeclFixity _ a -> flattenFixityFields a+  DeclForeign _ a b c -> pure a <> pure b <> flattenForeign c+  DeclRole _ a b c d -> pure a <> pure b <> flattenName c <> foldMap flattenRole d+  DeclValue _ a -> flattenValueBindingFields a++flattenQualifiedName :: QualifiedName a -> DList SourceToken+flattenQualifiedName = pure . qualTok++flattenName :: Name a -> DList SourceToken+flattenName = pure . nameTok++flattenLabel :: Label -> DList SourceToken+flattenLabel = pure . lblTok++flattenExport :: Export a -> DList SourceToken+flattenExport = \case+  ExportValue _ n -> flattenName n+  ExportOp _ n -> flattenName n+  ExportType _ n dms -> flattenName n <> foldMap flattenDataMembers dms+  ExportTypeOp _ t n -> pure t <> flattenName n+  ExportClass _ t n -> pure t <> flattenName n+  ExportModule _ t n -> pure t <> flattenName n++flattenDataMembers :: DataMembers a -> DList SourceToken+flattenDataMembers = \case+  DataAll _ t -> pure t+  DataEnumerated _ ns -> flattenWrapped (foldMap (flattenSeparated flattenName)) ns++flattenImportDecl :: ImportDecl a -> DList SourceToken+flattenImportDecl (ImportDecl _ a b c d) =+  pure a <>+  flattenName b <>+  foldMap (\(mt, is) ->+             foldMap pure mt <> flattenWrapped (flattenSeparated flattenImport) is) c <>+  foldMap (\(t, n) -> pure t <> flattenName n) d++flattenImport :: Import a -> DList SourceToken+flattenImport = \case+  ImportValue _ n -> flattenName n+  ImportOp _ n -> flattenName n+  ImportType _ n dms -> flattenName n <> foldMap flattenDataMembers dms+  ImportTypeOp _ t n -> pure t <> flattenName n+  ImportClass _ t n -> pure t <> flattenName n++flattenWrapped :: (a -> DList SourceToken) -> Wrapped a -> DList SourceToken+flattenWrapped k (Wrapped a b c) = pure a <> k b <> pure c++flattenSeparated :: (a -> DList SourceToken) -> Separated a -> DList SourceToken+flattenSeparated k (Separated a b) = k a <> foldMap (\(c, d) -> pure c <> k d) b++flattenOneOrDelimited+  :: (a -> DList SourceToken) -> OneOrDelimited a -> DList SourceToken+flattenOneOrDelimited f = \case+  One a -> f a+  Many a -> flattenWrapped (flattenSeparated f) a++flattenLabeled :: (a -> DList SourceToken) -> (b -> DList SourceToken) -> Labeled a b -> DList SourceToken+flattenLabeled ka kc (Labeled a b c) = ka a <> pure b <> kc c++flattenType :: Type a -> DList SourceToken+flattenType = \case+  TypeVar _ a -> pure $ nameTok a+  TypeConstructor _ a -> pure $ qualTok a+  TypeWildcard _ a -> pure a+  TypeHole _ a -> pure $ nameTok a+  TypeString _ a _ -> pure a+  TypeInt _ a b _ -> maybe mempty pure a <> pure b+  TypeRow _ a -> flattenWrapped flattenRow a+  TypeRecord _ a -> flattenWrapped flattenRow a+  TypeForall _ a b c d -> pure a <> foldMap flattenTypeVarBinding b <> pure c <> flattenType d+  TypeKinded _ a b c -> flattenType a <> pure b <> flattenType c+  TypeApp _ a b -> flattenType a <> flattenType b+  TypeOp _ a b c -> flattenType a <> pure (qualTok b) <> flattenType c+  TypeOpName _ a -> pure $ qualTok a+  TypeArr _ a b c -> flattenType a <> pure b <> flattenType c+  TypeArrName _ a -> pure a+  TypeConstrained _ a b c -> flattenConstraint a <> pure b <> flattenType c+  TypeParens _ a -> flattenWrapped flattenType a+  TypeUnaryRow _ a b -> pure a <> flattenType b++flattenRow :: Row a -> DList SourceToken+flattenRow (Row lbls tl) =+  foldMap (flattenSeparated (flattenLabeled (pure . lblTok) flattenType)) lbls+    <> foldMap (\(a, b) -> pure a <> flattenType b) tl++flattenTypeVarBinding :: TypeVarBinding a -> DList SourceToken+flattenTypeVarBinding = \case+  TypeVarKinded a -> flattenWrapped (flattenLabeled (pure . nameTok) flattenType) a+  TypeVarName a -> pure $ nameTok a++flattenConstraint :: Constraint a -> DList SourceToken+flattenConstraint = \case+  Constraint _ a b -> pure (qualTok a) <> foldMap flattenType b+  ConstraintParens _ a -> flattenWrapped flattenConstraint a
+ src/Language/PureScript/CST/Layout.hs view
@@ -0,0 +1,549 @@+-- |+-- ## High-Level Summary+--+-- This section provides a high-level summary of this file. For those who+-- know more about compiler-development, the below explanation is likely enough.+-- For everyone else, see the next section.+--+-- The parser itself is unaware of indentation, and instead only parses explicit+-- delimiters which are inserted by this layout algorithm (much like Haskell).+-- This is convenient because the actual grammar can be specified apart from the+-- indentation rules. Haskell has a few problematic productions which make it+-- impossible to implement a purely lexical layout algorithm, so it also has an+-- additional (and somewhat contentious) parser error side condition. PureScript+-- does not have these problematic productions (particularly foo, bar ::+-- SomeType syntax in declarations), but it does have a few gotchas of it's own.+-- The algorithm is "non-trivial" to say the least, but it is implemented as a+-- purely lexical delimiter parser on a token-by-token basis, which is highly+-- convenient, since it can be replicated in any language or toolchain. There is+-- likely room to simplify it, but there are some seemingly innocuous things+-- that complicate it.+--+-- "Naked" commas (case, patterns, guards, fundeps) are a constant source of+-- complexity, and indeed too much of this is what prevents Haskell from having+-- such an algorithm. Unquoted properties for layout keywords introduce a domino+-- effect of complexity since we have to mask and unmask any usage of . (also in+-- foralls!) or labels in record literals.+--+-- ## Detailed Summary+--+-- ### The Problem+--+-- The parser itself is unaware of indentation or other such layout concerns.+-- Rather than dealing with it explicitly, the parser and its+-- grammar rules are only aware of normal tokens (e.g. @TokLowerName@) and+-- three special zero-width tokens, @TokLayoutStart@, @TokLayoutSep@,+-- and @TokLayoutEnd@. This is convenient because the actual grammar+-- can be specified apart from the indentation rules and other such+-- layout concerns.+--+-- For a simple example, the parser parses all three examples of the code below+-- using the exact same grammar rules for the @let@ keyword despite+-- each example using different indentations levels:+--+-- @+-- -- Example 1+-- let foo = 5+--     x = 2 in foo+--+-- -- Example 2+-- let+--   bar = 5+--   y = 2+-- in bar+--+-- -- Example 3+-- let        baz+--                  =+--              5+--            z= 2 in baz+-- @+--+-- Each block of code might appear to the parser as a stream of the+-- following source tokens where the @\{@ sequence represents+-- @TokLayoutStart@, the @\;@ sequence represents @TokLayoutSep@,+-- and the @\}@ sequence represents @TokLayoutEnd@:+-- - @let \{foo = 5\;x = 2\} in foo@+-- - @let \{bar = 5\;y = 2\} in bar@+-- - @let \{baz = 5\;z = 2\} in baz@+--+--+-- For a more complex example, consider commas:+--+-- @+-- case one, { twoA, twoB }, [ three1+--    , three2+--    ,   do+--      { three3, three4 } <- case arg1, arg2 of+--         Nothing, _ -> { three3: 1, three4: 2 }+--         Just _, Nothing -> { three3: 2, three4: 3 }+--         _, _ -> { three3: 3, three4: 4 }+--      pure $ three3 + three4+--    ] of+-- @+--+-- Which of the above 13 commas function as the separaters between the+-- case binders (e.g. @one@) in the outermost @case ... of@ context?+--+-- ### The Solution+--+-- The parser doesn't have to care about layout concerns (e.g. indentation+-- or what starts and ends a context, such as a case binder) because the+-- lexer solves that problem instead.+--+-- So, how does the lexer solve this problem? It follows this general algorithm:+-- 1. Lex the source code text into an initial stream of `SourceToken`s+--    that do not have any of the three special tokens mentioned previously.+-- 2. On a token-by-token basis, determine whether the lexer should+--        1. insert one of the three special tokens,+--        2. modify the current context (e.g. are we within a case binder?+--           Are we in a record expression?)+--+-- Step 2 is handled via 'insertLayout' and is essentially a state machine.+-- The layout delimiters, (e.g. 'LytCase', 'LytBrace', 'LytProperty',+-- and 'LytOf' in the next section's example) either stop certain "rules"+-- from applying or ensure that certain "rules" now apply. By "rules",+-- we mean whether and where one of the three special tokens are added.+-- The comments in the source code for the 'insertLayout' algorithm call+-- pushing these delimiters onto the stack "masking" and popping them off+-- as "unmasking". Seeing when a layout delimiter is pushed and popped+-- are the keys to understanding this algorithm.+--+-- ### Walking Through an Example+--+-- Before showing an example, let's remember a few things.+--   1. The @TokLowerName "case"@ token (i.e. a "case" keyword) indicates the start+--      of a @case ... of@ context. That context includes case binders (like the+--      example shown previously) that can get quite complex. When encountered,+--      we may need to insert one or more of the three special tokens here+--      until we encounter the terminating @TokLowerName "of"@ token that+--      signifies its end.+--   2. "case" and "of" can also appear as a record field's name. In such a context,+--      they would not start or end a @case ... of@ block.+--+-- Given the below source code...+--+-- @+-- case { case: "foo", of: "bar" } of+-- @+--+-- the lexer would go through something like the following states:+-- 1. Encountered @TokLowerName "case"@. Update current context to+--    "within a case of expression" by pushing the 'LytCase' delimiter+--    onto the layout delimiter stack. Insert the @case@ token+--    into the stream of source tokens.+-- 2. Encountered @TokLeftBrace@. Update current context to+--    "within a record expression" by pushing the 'LytBrace' delimiter.+--    Since we expect a field name to be the next token we see,+--    which may include a reserved keyword, update the current context again to+--    "expecting a field name" by pushing the `LytProperty`.+--    delimiter. Insert the @{@ token into the stream of source tokens.+-- 3. Encountered @TokLowerName "case"@. Check the current context.+--    Since it's a `LytProperty`, this is a field name and we shouldn't+--    assume that the next few tokens will be case binders. However,+--    since this might be a record with no more fields, update the+--    current context back to "within a record expression" by popping+--    the `LytProperty` off the layout delimiter stack. Insert the @case@ token+-- 4. Encountered @TokColon@. Insert the @:@ token+-- 5. Encountered @TokLowerName "foo"@. Insert the @foo@ token.+-- 6. Encountered @TokComma@. Check the current context. Since it's a `LytBrace`,+--    we're in a record expression and there is another field. Update the+--    current context by pushing `LytProperty` as we expect a field name again.+-- 7. Encountered @TokLowerName "of"@. Check the current context.+--    Since it's a `LytProperty`, this is a field name rather+--    than the end of a case binder. Thus, we don't expect the next tokens+--    to be the @body@ in a @case ... of body@ expression. However, since+--    this might be a record with no more fields, update the current context+--    back to "within a record expression" by popping the `LytProperty`+--    off the stack. Insert the @of@ token.+-- 8. Encountered @TokRightBrace@. Check the current context.+--    Since it's a `LytBrace`, this is the end of a record expression.+--    Update the current context to "within a case of expression"+--    by popping the `LytBrace` off the stack. Insert the @}@ token.+-- 9. Encountered @TokLowername "of"@. Check the current context.+--    Since it's a 'LytCase', this is the end of a @case ... of@ expression+--    and the body will follow. Update the current context to+--    "body of a case of expression" by pushing 'LytOf' onto the layout stack.+--    Insert the @of@ token into the stream of tokens.+--+module Language.PureScript.CST.Layout where++import Prelude++import Data.DList (snoc)+import qualified Data.DList as DList+import Data.Foldable (find)+import Data.Function ((&))+import Language.PureScript.CST.Types++type LayoutStack = [(SourcePos, LayoutDelim)]++data LayoutDelim+  = LytRoot+  | LytTopDecl+  | LytTopDeclHead+  | LytDeclGuard+  | LytCase+  | LytCaseBinders+  | LytCaseGuard+  | LytLambdaBinders+  | LytParen+  | LytBrace+  | LytSquare+  | LytIf+  | LytThen+  | LytProperty+  | LytForall+  | LytTick+  | LytLet+  | LytLetStmt+  | LytWhere+  | LytOf+  | LytDo+  | LytAdo+  deriving (Show, Eq, Ord)++isIndented :: LayoutDelim -> Bool+isIndented = \case+  LytLet     -> True+  LytLetStmt -> True+  LytWhere   -> True+  LytOf      -> True+  LytDo      -> True+  LytAdo     -> True+  _          -> False++isTopDecl :: SourcePos -> LayoutStack -> Bool+isTopDecl tokPos = \case+  [(lytPos, LytWhere), (_, LytRoot)]+    | srcColumn tokPos == srcColumn lytPos -> True+  _ -> False++lytToken :: SourcePos -> Token -> SourceToken+lytToken pos = SourceToken ann+  where+  ann = TokenAnn+    { tokRange = SourceRange pos pos+    , tokLeadingComments = []+    , tokTrailingComments = []+    }++insertLayout :: SourceToken -> SourcePos -> LayoutStack -> (LayoutStack, [SourceToken])+insertLayout src@(SourceToken tokAnn tok) nextPos stack =+  DList.toList <$> insert (stack, mempty)+  where+  tokPos =+    srcStart $ tokRange tokAnn++  insert state@(stk, acc) = case tok of+    -- `data` declarations need masking (LytTopDecl) because the usage of `|`+    -- should not introduce a LytDeclGard context.+    TokLowerName [] "data" ->+      case state & insertDefault of+        state'@(stk', _) | isTopDecl tokPos stk' ->+          state' & pushStack tokPos LytTopDecl+        state' ->+          state' & popStack (== LytProperty)++    -- `class` declaration heads need masking (LytTopDeclHead) because the+    -- usage of commas in functional dependencies.+    TokLowerName [] "class" ->+      case state & insertDefault of+        state'@(stk', _) | isTopDecl tokPos stk' ->+          state' & pushStack tokPos LytTopDeclHead+        state' ->+          state' & popStack (== LytProperty)++    TokLowerName [] "where" ->+      case stk of+        (_, LytTopDeclHead) : stk' ->+          (stk', acc) & insertToken src & insertStart LytWhere+        (_, LytProperty) : stk' ->+          (stk', acc) & insertToken src+        _ ->+          state & collapse whereP & insertToken src & insertStart LytWhere+      where+      -- `where` always closes do blocks:+      --     example = do do do do foo where foo = ...+      --+      -- `where` closes layout contexts even when indented at the same level:+      --     example = case+      --       Foo -> ...+      --       Bar -> ...+      --       where foo = ...+      whereP _      LytDo = True+      whereP lytPos lyt   = offsideEndP lytPos lyt++    TokLowerName [] "in" ->+      case collapse inP state of+        -- `let/in` is not allowed in `ado` syntax. `in` is treated as a+        -- delimiter and must always close the `ado`.+        --    example = ado+        --      foo <- ...+        --      let bar = ...+        --      in ...+        ((_, LytLetStmt) : (_, LytAdo) : stk', acc') ->+          (stk', acc') & insertEnd & insertEnd & insertToken src+        ((_, lyt) : stk', acc') | isIndented lyt ->+          (stk', acc') & insertEnd & insertToken src+        _ ->+          state & insertDefault & popStack (== LytProperty)+      where+      inP _ LytLet = False+      inP _ LytAdo = False+      inP _ lyt    = isIndented lyt++    TokLowerName [] "let" ->+      state & insertKwProperty next+      where+      next state'@(stk', _) = case stk' of+        (p, LytDo) : _ | srcColumn p == srcColumn tokPos ->+          state' & insertStart LytLetStmt+        (p, LytAdo) : _ | srcColumn p == srcColumn tokPos ->+          state' & insertStart LytLetStmt+        _ ->+          state' & insertStart LytLet++    TokLowerName _ "do" ->+      state & insertKwProperty (insertStart LytDo)++    TokLowerName _ "ado" ->+      state & insertKwProperty (insertStart LytAdo)++    -- `case` heads need masking due to commas.+    TokLowerName [] "case" ->+      state & insertKwProperty (pushStack tokPos LytCase)++    TokLowerName [] "of" ->+      case collapse indentedP state of+        -- When `of` is matched with a `case`, we are in a case block, and we+        -- need to mask additional contexts (LytCaseBinders, LytCaseGuards)+        -- due to commas.+        ((_, LytCase) : stk', acc') ->+          (stk', acc') & insertToken src & insertStart LytOf & pushStack nextPos LytCaseBinders+        state' ->+          state' & insertDefault & popStack (== LytProperty)++    -- `if/then/else` is considered a delimiter context. This allows us to+    -- write chained expressions in `do` blocks without stair-stepping:+    --     example = do+    --       foo+    --       if ... then+    --         ...+    --       else if ... then+    --         ...+    --       else+    --         ...+    TokLowerName [] "if" ->+      state & insertKwProperty (pushStack tokPos LytIf)++    TokLowerName [] "then" ->+      case state & collapse indentedP of+        ((_, LytIf) : stk', acc') ->+          (stk', acc') & insertToken src & pushStack tokPos LytThen+        _ ->+          state & insertDefault & popStack (== LytProperty)++    TokLowerName [] "else" ->+      case state & collapse indentedP of+        ((_, LytThen) : stk', acc') ->+          (stk', acc') & insertToken src+        _ ->+          -- We don't want to insert a layout separator for top-level `else` in+          -- instance chains.+          case state & collapse offsideP of+            state'@(stk', _) | isTopDecl tokPos stk' ->+              state' & insertToken src+            state' ->+              state' & insertSep & insertToken src & popStack (== LytProperty)++    -- `forall` binders need masking because the usage of `.` should not+    -- introduce a LytProperty context.+    TokForall _ ->+      state & insertKwProperty (pushStack tokPos LytForall)++    -- Lambdas need masking because the usage of `->` should not close a+    -- LytDeclGuard or LytCaseGuard context.+    TokBackslash ->+      state & insertDefault & pushStack tokPos LytLambdaBinders++    TokRightArrow _ ->+      state & collapse arrowP & popStack guardP & insertToken src+      where+      arrowP _      LytDo     = True+      arrowP _      LytOf     = False+      arrowP lytPos lyt       = offsideEndP lytPos lyt++      guardP LytCaseBinders   = True+      guardP LytCaseGuard     = True+      guardP LytLambdaBinders = True+      guardP _                = False++    TokEquals ->+      case state & collapse equalsP of+        ((_, LytDeclGuard) : stk', acc') ->+          (stk', acc') & insertToken src+        _ ->+          state & insertDefault+      where+      equalsP _ LytWhere   = True+      equalsP _ LytLet     = True+      equalsP _ LytLetStmt = True+      equalsP _ _          = False++    -- Guards need masking because of commas.+    TokPipe ->+      case collapse offsideEndP state of+        state'@((_, LytOf) : _, _) ->+          state' & pushStack tokPos LytCaseGuard & insertToken src+        state'@((_, LytLet) : _, _) ->+          state' & pushStack tokPos LytDeclGuard & insertToken src+        state'@((_, LytLetStmt) : _, _) ->+          state' & pushStack tokPos LytDeclGuard & insertToken src+        state'@((_, LytWhere) : _, _) ->+          state' & pushStack tokPos LytDeclGuard & insertToken src+        _ ->+          state & insertDefault++    -- Ticks can either start or end an infix expression. We preemptively+    -- collapse all indentation contexts in search of a starting delimiter,+    -- and backtrack if we don't find one.+    TokTick ->+      case state & collapse indentedP of+        ((_, LytTick) : stk', acc') ->+          (stk', acc') & insertToken src+        _ ->+          state & collapse offsideEndP & insertSep & insertToken src & pushStack tokPos LytTick++    -- In general, commas should close all indented contexts.+    --     example = [ do foo+    --                    bar, baz ]+    TokComma ->+      case state & collapse indentedP of+        -- If we see a LytBrace, then we are in a record type or literal.+        -- Record labels need masking so we can use unquoted keywords as labels+        -- without accidentally littering layout delimiters.+        state'@((_, LytBrace) : _, _) ->+          state' & insertToken src & pushStack tokPos LytProperty+        state' ->+          state' & insertToken src++    -- TokDot tokens usually entail property access, which need masking so we+    -- can use unquoted keywords as labels.+    TokDot ->+      case state & insertDefault of+        ((_, LytForall) : stk', acc') ->+          (stk', acc')+        state' ->+          state' & pushStack tokPos LytProperty++    TokLeftParen ->+      state & insertDefault & pushStack tokPos LytParen++    TokLeftBrace ->+      state & insertDefault & pushStack tokPos LytBrace & pushStack tokPos LytProperty++    TokLeftSquare ->+      state & insertDefault & pushStack tokPos LytSquare++    TokRightParen ->+      state & collapse indentedP & popStack (== LytParen) & insertToken src++    TokRightBrace ->+      state & collapse indentedP & popStack (== LytProperty) & popStack (== LytBrace) & insertToken src++    TokRightSquare ->+      state & collapse indentedP & popStack (== LytSquare) & insertToken src++    TokString _ _ ->+      state & insertDefault & popStack (== LytProperty)++    TokLowerName [] _ ->+      state & insertDefault & popStack (== LytProperty)++    TokOperator _ _ ->+      state & collapse offsideEndP & insertSep & insertToken src++    _ ->+      state & insertDefault++  insertDefault state =+    state & collapse offsideP & insertSep & insertToken src++  insertStart lyt state@(stk, _) =+    -- We only insert a new layout start when it's going to increase indentation.+    -- This prevents things like the following from parsing:+    --     instance foo :: Foo where+    --     foo = 42+    case find (isIndented . snd) stk of+      Just (pos, _) | srcColumn nextPos <= srcColumn pos -> state+      _ -> state & pushStack nextPos lyt & insertToken (lytToken nextPos TokLayoutStart)++  insertSep state@(stk, acc) = case stk of+    -- LytTopDecl is closed by a separator.+    (lytPos, LytTopDecl) : stk' | sepP lytPos ->+      (stk', acc) & insertToken sepTok+    -- LytTopDeclHead can be closed by a separator if there is no `where`.+    (lytPos, LytTopDeclHead) : stk' | sepP lytPos ->+      (stk', acc) & insertToken sepTok+    (lytPos, lyt) : _ | indentSepP lytPos lyt ->+      case lyt of+        -- If a separator is inserted in a case block, we need to push an+        -- additional LytCaseBinders context for comma masking.+        LytOf -> state & insertToken sepTok & pushStack tokPos LytCaseBinders+        _     -> state & insertToken sepTok+    _ -> state+    where+    sepTok = lytToken tokPos TokLayoutSep++  insertKwProperty k state =+    case state & insertDefault of+      ((_, LytProperty) : stk', acc') ->+        (stk', acc')+      state' ->+        k state'++  insertEnd =+    insertToken (lytToken tokPos TokLayoutEnd)++  insertToken token (stk, acc) =+    (stk, acc `snoc` token)++  pushStack lytPos lyt (stk, acc) =+    ((lytPos, lyt) : stk, acc)++  popStack p ((_, lyt) : stk', acc)+    | p lyt = (stk', acc)+  popStack _ state = state++  collapse p = uncurry go+    where+    go ((lytPos, lyt) : stk) acc+      | p lytPos lyt =+          go stk $ if isIndented lyt+                   then acc `snoc` lytToken tokPos TokLayoutEnd+                   else acc+    go stk acc = (stk, acc)++  indentedP =+    const isIndented++  offsideP lytPos lyt =+    isIndented lyt && srcColumn tokPos < srcColumn lytPos++  offsideEndP lytPos lyt =+    isIndented lyt && srcColumn tokPos <= srcColumn lytPos++  indentSepP lytPos lyt =+    isIndented lyt && sepP lytPos++  sepP lytPos =+    srcColumn tokPos == srcColumn lytPos && srcLine tokPos /= srcLine lytPos++unwindLayout :: SourcePos -> [Comment LineFeed] -> LayoutStack -> [SourceToken]+unwindLayout pos leading = go+  where+  go [] = []+  go ((_, LytRoot) : _) = [SourceToken (TokenAnn (SourceRange pos pos) leading []) TokEof]+  go ((_, lyt) : stk) | isIndented lyt = lytToken pos TokLayoutEnd : go stk+  go (_ : stk) = go stk
+ src/Language/PureScript/CST/Lexer.hs view
@@ -0,0 +1,714 @@+module Language.PureScript.CST.Lexer+  ( lenient+  , lex+  , lexTopLevel+  , lexWithState+  , isUnquotedKey+  ) where++import Prelude hiding (lex, exp, exponent, lines)++import Control.Monad (join)+import qualified Data.Char as Char+import qualified Data.DList as DList+import Data.Foldable (foldl')+import Data.Functor (($>))+import qualified Data.Scientific as Sci+import Data.String (fromString)+import Data.Text (Text)+import qualified Data.Text as Text+import qualified Data.Text.PureScript as Text+import Language.PureScript.CST.Errors+import Language.PureScript.CST.Monad hiding (token)+import Language.PureScript.CST.Layout+import Language.PureScript.CST.Positions+import Language.PureScript.CST.Types++-- | Stops at the first lexing error and replaces it with TokEof. Otherwise,+-- the parser will fail when it attempts to draw a lookahead token.+lenient :: [LexResult] -> [LexResult]+lenient = go+  where+  go [] = []+  go (Right a : as) = Right a : go as+  go (Left (st, _) : _) = do+    let+      pos = lexPos st+      ann = TokenAnn (SourceRange pos pos) (lexLeading st) []+    [Right (SourceToken ann TokEof)]++-- | Lexes according to root layout rules.+lex :: Text -> [LexResult]+lex src = do+  let (leading, src') = comments src+  lexWithState $ LexState+    { lexPos = advanceLeading (SourcePos 1 1) leading+    , lexLeading = leading+    , lexSource = src'+    , lexStack = [(SourcePos 0 0, LytRoot)]+    }++-- | Lexes according to top-level declaration context rules.+lexTopLevel :: Text -> [LexResult]+lexTopLevel src = do+  let+    (leading, src') = comments src+    lexPos = advanceLeading (SourcePos 1 1) leading+    hd = Right $ lytToken lexPos TokLayoutStart+    tl = lexWithState $ LexState+      { lexPos = lexPos+      , lexLeading = leading+      , lexSource = src'+      , lexStack = [(lexPos, LytWhere), (SourcePos 0 0, LytRoot)]+      }+  hd : tl++-- | Lexes according to some LexState.+lexWithState :: LexState -> [LexResult]+lexWithState = go+  where+  Parser lexK =+    tokenAndComments++  go state@LexState {..} =+    lexK lexSource onError onSuccess+    where+    onError lexSource' err = do+      let+        len1 = Text.length lexSource+        len2 = Text.length lexSource'+        chunk = Text.take (max 0 (len1 - len2)) lexSource+        chunkDelta = textDelta chunk+        pos = applyDelta lexPos chunkDelta+      pure $ Left+        ( state { lexSource = lexSource' }+        , ParserErrorInfo (SourceRange pos $ applyDelta pos (0, 1)) [] lexStack err+        )++    onSuccess _ (TokEof, _) =+      Right <$> unwindLayout lexPos lexLeading lexStack+    onSuccess lexSource' (tok, (trailing, lexLeading')) = do+      let+        endPos = advanceToken lexPos tok+        lexPos' = advanceLeading (advanceTrailing endPos trailing) lexLeading'+        tokenAnn = TokenAnn+          { tokRange = SourceRange lexPos endPos+          , tokLeadingComments = lexLeading+          , tokTrailingComments = trailing+          }+        (lexStack', toks) =+          insertLayout (SourceToken tokenAnn tok) lexPos' lexStack+        state' = LexState+          { lexPos = lexPos'+          , lexLeading = lexLeading'+          , lexSource = lexSource'+          , lexStack = lexStack'+          }+      go2 state' toks++  go2 state [] = go state+  go2 state (t : ts) = Right t : go2 state ts++type Lexer = ParserM ParserErrorType Text++{-# INLINE next #-}+next :: Lexer ()+next = Parser $ \inp _ ksucc ->+  ksucc (Text.drop 1 inp) ()++{-# INLINE nextWhile #-}+nextWhile :: (Char -> Bool) -> Lexer Text+nextWhile p = Parser $ \inp _ ksucc -> do+  let (chs, inp') = Text.span p inp+  ksucc inp' chs++{-# INLINE nextWhile' #-}+nextWhile' :: Int -> (Char -> Bool) -> Lexer Text+nextWhile' n p = Parser $ \inp _ ksucc -> do+  let (chs, inp') = Text.spanUpTo n p inp+  ksucc inp' chs++{-# INLINE peek #-}+peek :: Lexer (Maybe Char)+peek = Parser $ \inp _ ksucc ->+  if Text.null inp+    then ksucc inp Nothing+    else ksucc inp $ Just $ Text.head inp++{-# INLINE restore #-}+restore :: (ParserErrorType -> Bool) -> Lexer a -> Lexer a+restore p (Parser k) = Parser $ \inp kerr ksucc ->+  k inp (\inp' err -> kerr (if p err then inp else inp') err) ksucc++tokenAndComments :: Lexer (Token, ([Comment void], [Comment LineFeed]))+tokenAndComments = (,) <$> token <*> breakComments++comments :: Text -> ([Comment LineFeed], Text)+comments = \src -> k src (\_ _ -> ([], src)) (\inp (a, b) -> (a <> b, inp))+  where+  Parser k = breakComments++breakComments :: Lexer ([Comment void], [Comment LineFeed])+breakComments = k0 []+  where+  k0 acc = do+    spaces <- nextWhile (== ' ')+    lines  <- nextWhile isLineFeed+    let+      acc'+        | Text.null spaces = acc+        | otherwise = Space (Text.length spaces) : acc+    if Text.null lines+      then do+        mbComm <- comment+        case mbComm of+          Just comm -> k0 (comm : acc')+          Nothing   -> pure (reverse acc', [])+      else+        k1 acc' (goWs [] $ Text.unpack lines)++  k1 trl acc = do+    ws <- nextWhile (\c -> c == ' ' || isLineFeed c)+    let acc' = goWs acc $ Text.unpack ws+    mbComm <- comment+    case mbComm of+      Just comm -> k1 trl (comm : acc')+      Nothing   -> pure (reverse trl, reverse acc')++  goWs a ('\r' : '\n' : ls) = goWs (Line CRLF : a) ls+  goWs a ('\r' : ls) = goWs (Line CRLF : a) ls+  goWs a ('\n' : ls) = goWs (Line LF : a) ls+  goWs a (' ' : ls) = goSpace a 1 ls+  goWs a _ = a++  goSpace a !n (' ' : ls) = goSpace a (n + 1) ls+  goSpace a !n ls = goWs (Space n : a) ls++  isBlockComment = Parser $ \inp _ ksucc ->+    case Text.uncons inp of+      Just ('-', inp2) ->+        case Text.uncons inp2 of+          Just ('-', inp3) ->+            ksucc inp3 $ Just False+          _ ->+            ksucc inp Nothing+      Just ('{', inp2) ->+        case Text.uncons inp2 of+          Just ('-', inp3) ->+            ksucc inp3 $ Just True+          _ ->+            ksucc inp Nothing+      _ ->+        ksucc inp Nothing++  comment = isBlockComment >>= \case+    Just True  -> Just <$> blockComment "{-"+    Just False -> Just <$> lineComment "--"+    Nothing    -> pure Nothing++  lineComment acc = do+    comm <- nextWhile (\c -> c /= '\r' && c /= '\n')+    pure $ Comment (acc <> comm)++  blockComment acc = do+    chs <- nextWhile (/= '-')+    dashes <- nextWhile (== '-')+    if Text.null dashes+      then pure $ Comment $ acc <> chs+      else peek >>= \case+        Just '}' -> next $> Comment (acc <> chs <> dashes <> "}")+        _ -> blockComment (acc <> chs <> dashes)++token :: Lexer Token+token = peek >>= maybe (pure TokEof) k0+  where+  k0 ch1 = case ch1 of+    '('  -> next *> leftParen+    ')'  -> next $> TokRightParen+    '{'  -> next $> TokLeftBrace+    '}'  -> next $> TokRightBrace+    '['  -> next $> TokLeftSquare+    ']'  -> next $> TokRightSquare+    '`'  -> next $> TokTick+    ','  -> next $> TokComma+    '∷'  -> next *> orOperator1 (TokDoubleColon Unicode) ch1+    '←'  -> next *> orOperator1 (TokLeftArrow Unicode) ch1+    '→'  -> next *> orOperator1 (TokRightArrow Unicode) ch1+    '⇒'  -> next *> orOperator1 (TokRightFatArrow Unicode) ch1+    '∀'  -> next *> orOperator1 (TokForall Unicode) ch1+    '|'  -> next *> orOperator1 TokPipe ch1+    '.'  -> next *> orOperator1 TokDot ch1+    '\\' -> next *> orOperator1 TokBackslash ch1+    '<'  -> next *> orOperator2 (TokLeftArrow ASCII) ch1 '-'+    '-'  -> next *> orOperator2 (TokRightArrow ASCII) ch1 '>'+    '='  -> next *> orOperator2' TokEquals (TokRightFatArrow ASCII) ch1 '>'+    ':'  -> next *> orOperator2' (TokOperator [] ":") (TokDoubleColon ASCII) ch1 ':'+    '?'  -> next *> hole+    '\'' -> next *> char+    '"'  -> next *> string+    _  | Char.isDigit ch1 -> restore (== ErrNumberOutOfRange) (next *> number ch1)+       | Char.isUpper ch1 -> next *> upper [] ch1+       | isIdentStart ch1 -> next *> lower [] ch1+       | isSymbolChar ch1 -> next *> operator [] [ch1]+       | otherwise        -> throw $ ErrLexeme (Just [ch1]) []++  {-# INLINE orOperator1 #-}+  orOperator1 :: Token -> Char -> Lexer Token+  orOperator1 tok ch1 = join $ Parser $ \inp _ ksucc ->+    case Text.uncons inp of+      Just (ch2, inp2) | isSymbolChar ch2 ->+        ksucc inp2 $ operator [] [ch1, ch2]+      _ ->+        ksucc inp $ pure tok++  {-# INLINE orOperator2 #-}+  orOperator2 :: Token -> Char -> Char -> Lexer Token+  orOperator2 tok ch1 ch2 = join $ Parser $ \inp _ ksucc ->+    case Text.uncons inp of+      Just (ch2', inp2) | ch2 == ch2' ->+        case Text.uncons inp2 of+          Just (ch3, inp3) | isSymbolChar ch3 ->+            ksucc inp3 $ operator [] [ch1, ch2, ch3]+          _ ->+            ksucc inp2 $ pure tok+      _ ->+        ksucc inp $ operator [] [ch1]++  {-# INLINE orOperator2' #-}+  orOperator2' :: Token -> Token -> Char -> Char -> Lexer Token+  orOperator2' tok1 tok2 ch1 ch2 = join $ Parser $ \inp _ ksucc ->+    case Text.uncons inp of+      Just (ch2', inp2) | ch2 == ch2' ->+        case Text.uncons inp2 of+          Just (ch3, inp3) | isSymbolChar ch3 ->+            ksucc inp3 $ operator [] [ch1, ch2, ch3]+          _ ->+            ksucc inp2 $ pure tok2+      Just (ch2', inp2) | isSymbolChar ch2' ->+        ksucc inp2 $ operator [] [ch1, ch2']+      _ ->+        ksucc inp $ pure tok1++  {-+    leftParen+      : '(' '→'  ')'+      | '(' '->' ')'+      | '('  symbolChar+  ')'+      | '('+  -}+  leftParen :: Lexer Token+  leftParen = Parser $ \inp kerr ksucc ->+    case Text.span isSymbolChar inp of+      (chs, inp2)+        | Text.null chs -> ksucc inp TokLeftParen+        | otherwise ->+            case Text.uncons inp2 of+              Just (')', inp3) ->+                case chs of+                  "→"  -> ksucc inp3 $ TokSymbolArr Unicode+                  "->" -> ksucc inp3 $ TokSymbolArr ASCII+                  _ | isReservedSymbol chs -> kerr inp ErrReservedSymbol+                    | otherwise -> ksucc inp3 $ TokSymbolName [] chs+              _ -> ksucc inp TokLeftParen++  {-+    symbol+      : '(' symbolChar+ ')'+  -}+  symbol :: [Text] -> Lexer Token+  symbol qual = restore isReservedSymbolError $ peek >>= \case+    Just ch | isSymbolChar ch ->+      nextWhile isSymbolChar >>= \chs ->+        peek >>= \case+          Just ')'+            | isReservedSymbol chs -> throw ErrReservedSymbol+            | otherwise -> next $> TokSymbolName (reverse qual) chs+          Just ch2 -> throw $ ErrLexeme (Just [ch2]) []+          Nothing  -> throw ErrEof+    Just ch -> throw $ ErrLexeme (Just [ch]) []+    Nothing -> throw ErrEof++  {-+    operator+      : symbolChar++  -}+  operator :: [Text] -> String -> Lexer Token+  operator qual pre = do+    rest <- nextWhile isSymbolChar+    pure . TokOperator (reverse qual) $ Text.pack pre <> rest++  {-+    moduleName+      : upperChar alphaNumChar*++    qualifier+      : (moduleName '.')* moduleName++    upper+      : (qualifier '.')? upperChar identChar*+      | qualifier '.' lowerQualified+      | qualifier '.' operator+      | qualifier '.' symbol+  -}+  upper :: [Text] -> Char -> Lexer Token+  upper qual pre = do+    rest <- nextWhile isIdentChar+    ch1  <- peek+    let name = Text.cons pre rest+    case ch1 of+      Just '.' -> do+        let qual' = name : qual+        next *> peek >>= \case+          Just '(' -> next *> symbol qual'+          Just ch2+            | Char.isUpper ch2 -> next *> upper qual' ch2+            | isIdentStart ch2 -> next *> lower qual' ch2+            | isSymbolChar ch2 -> next *> operator qual' [ch2]+            | otherwise -> throw $ ErrLexeme (Just [ch2]) []+          Nothing ->+            throw ErrEof+      _ ->+        pure $ TokUpperName (reverse qual) name++  {-+    lower+      : '_'+      | 'forall'+      | lowerChar identChar*++    lowerQualified+      : lowerChar identChar*+  -}+  lower :: [Text] -> Char -> Lexer Token+  lower qual pre = do+    rest <- nextWhile isIdentChar+    case pre of+      '_' | Text.null rest ->+        if null qual+          then pure TokUnderscore+          else throw $ ErrLexeme (Just [pre]) []+      _ ->+        case Text.cons pre rest of+          "forall" | null qual -> pure $ TokForall ASCII+          name -> pure $ TokLowerName (reverse qual) name++  {-+    hole+      : '?' identChar++  -}+  hole :: Lexer Token+  hole = do+    name <- nextWhile isIdentChar+    if Text.null name+      then operator [] ['?']+      else pure $ TokHole name++  {-+    char+      : "'" '\' escape "'"+      | "'" [^'] "'"+  -}+  char :: Lexer Token+  char = do+    (raw, ch) <- peek >>= \case+      Just '\\' -> do+        (raw, ch2) <- next *> escape+        pure (Text.cons '\\' raw, ch2)+      Just ch ->+        next $> (Text.singleton ch, ch)+      Nothing ->+        throw ErrEof+    peek >>= \case+      Just '\''+        | fromEnum ch > 0xFFFF -> throw ErrAstralCodePointInChar+        | otherwise -> next $> TokChar raw ch+      Just ch2 ->+        throw $ ErrLexeme (Just [ch2]) []+      _ ->+        throw ErrEof++  {-+    stringPart+      : '\' escape+      | '\' [ \r\n]+ '\'+      | [^"]++    string+      : '"' stringPart* '"'+      | '"""' '"'{0,2} ([^"]+ '"'{1,2})* [^"]* '"""'++    A raw string literal can't contain any sequence of 3 or more quotes,+    although sequences of 1 or 2 quotes are allowed anywhere, including at the+    beginning or the end.+  -}+  string :: Lexer Token+  string = do+    quotes1 <- nextWhile' 7 (== '"')+    case Text.length quotes1 of+      0 -> do+        let+          go raw acc = do+            chs <- nextWhile isNormalStringChar+            let+              raw' = raw <> chs+              acc' = acc <> DList.fromList (Text.unpack chs)+            peek >>= \case+              Just '"'  -> next $> TokString raw' (fromString (DList.toList acc'))+              Just '\\' -> next *> goEscape (raw' <> "\\") acc'+              Just _    -> throw ErrLineFeedInString+              Nothing   -> throw ErrEof++          goEscape raw acc = do+            mbCh <- peek+            case mbCh of+              Just ch1 | isStringGapChar ch1 -> do+                gap <- nextWhile isStringGapChar+                peek >>= \case+                  Just '"'  -> next $> TokString (raw <> gap) (fromString (DList.toList acc))+                  Just '\\' -> next *> go (raw <> gap <> "\\") acc+                  Just ch   -> throw $ ErrCharInGap ch+                  Nothing   -> throw ErrEof+              _ -> do+                (raw', ch) <- escape+                go (raw <> raw') (acc <> DList.singleton ch)+        go "" mempty+      1 ->+        pure $ TokString "" ""+      n | n >= 5 ->+        pure $ TokRawString $ Text.drop 5 quotes1+      _ -> do+        let+          go acc = do+            chs <- nextWhile (/= '"')+            quotes2 <- nextWhile' 5 (== '"')+            case Text.length quotes2 of+              0          -> throw ErrEof+              n | n >= 3 -> pure $ TokRawString $ acc <> chs <> Text.drop 3 quotes2+              _          -> go (acc <> chs <> quotes2)+        go $ Text.drop 2 quotes1++  {-+    escape+      : 't'+      | 'r'+      | 'n'+      | "'"+      | '"'+      | 'x' [0-9a-fA-F]{0,6}+  -}+  escape :: Lexer (Text, Char)+  escape = do+    ch <- peek+    case ch of+      Just 't'  -> next $> ("t", '\t')+      Just 'r'  -> next $> ("r", '\r')+      Just 'n'  -> next $> ("n", '\n')+      Just '"'  -> next $> ("\"", '"')+      Just '\'' -> next $> ("'", '\'')+      Just '\\' -> next $> ("\\", '\\')+      Just 'x'  -> (*>) next $ Parser $ \inp kerr ksucc -> do+        let+          go n acc (ch' : chs)+            | Char.isHexDigit ch' = go (n * 16 + Char.digitToInt ch') (ch' : acc) chs+          go n acc _+            | n <= 0x10FFFF =+                ksucc (Text.drop (length acc) inp)+                  ("x" <> Text.pack (reverse acc), Char.chr n)+            | otherwise =+                kerr inp ErrCharEscape -- TODO+        go 0 [] $ Text.unpack $ Text.take 6 inp+      _ -> throw ErrCharEscape++  {-+    number+      : hexadecimal+      | integer ('.'  fraction)? exponent?+  -}+  number :: Char -> Lexer Token+  number ch1 = peek >>= \ch2 -> case (ch1, ch2) of+    ('0', Just 'x') -> next *> hexadecimal+    (_, _) -> do+      mbInt <- integer1 ch1+      mbFraction <- fraction+      case (mbInt, mbFraction) of+        (Just (raw, int), Nothing) -> do+          let int' = digitsToInteger int+          exponent >>= \case+            Just (raw', exp) ->+              sciDouble (raw <> raw') $ Sci.scientific int' exp+            Nothing ->+              pure $ TokInt raw int'+        (Just (raw, int), Just (raw', frac)) -> do+          let sci = digitsToScientific int frac+          exponent >>= \case+            Just (raw'', exp) ->+              sciDouble (raw <> raw' <> raw'') $ uncurry Sci.scientific $ (+ exp) <$> sci+            Nothing ->+              sciDouble (raw <> raw') $ uncurry Sci.scientific sci+        (Nothing, Just (raw, frac)) -> do+          let sci = digitsToScientific [] frac+          exponent >>= \case+            Just (raw', exp) ->+              sciDouble (raw <> raw') $ uncurry Sci.scientific $ (+ exp) <$> sci+            Nothing ->+              sciDouble raw $ uncurry Sci.scientific sci+        (Nothing, Nothing) ->+          peek >>= \ch -> throw $ ErrLexeme (pure <$> ch) []++  sciDouble :: Text -> Sci.Scientific -> Lexer Token+  sciDouble raw sci = case Sci.toBoundedRealFloat sci of+    Left _ -> throw ErrNumberOutOfRange+    Right n -> pure $ TokNumber raw n++  {-+    integer+      : '0'+      | [1-9] digits+  -}+  integer :: Lexer (Maybe (Text, String))+  integer = peek >>= \case+    Just '0' -> next *> peek >>= \case+      Just ch | isNumberChar ch -> throw ErrLeadingZero+      _ -> pure $ Just ("0", "0")+    Just ch | Char.isDigit ch -> Just <$> digits+    _ -> pure Nothing++  {-+    integer1+      : '0'+      | [1-9] digits++    This is the same as 'integer', the only difference is that this expects the+    first char to be consumed during dispatch.+  -}+  integer1 :: Char -> Lexer (Maybe (Text, String))+  integer1 = \case+    '0' -> peek >>= \case+      Just ch | isNumberChar ch -> throw ErrLeadingZero+      _ -> pure $ Just ("0", "0")+    ch | Char.isDigit ch -> do+      (raw, chs) <- digits+      pure $ Just (Text.cons ch raw, ch : chs)+    _ -> pure Nothing++  {-+    fraction+      : '.' [0-9_]++  -}+  fraction :: Lexer (Maybe (Text, String))+  fraction = Parser $ \inp _ ksucc ->+    -- We need more than a single char lookahead for things like `1..10`.+    case Text.uncons inp of+      Just ('.', inp')+        | (raw, inp'') <- Text.span isNumberChar inp'+        , not (Text.null raw) ->+            ksucc inp'' $ Just ("." <> raw, filter (/= '_') $ Text.unpack raw)+      _ ->+        ksucc inp Nothing++  {-+    digits+      : [0-9_]*++    Digits can contain underscores, which are ignored.+  -}+  digits :: Lexer (Text, String)+  digits = do+    raw <- nextWhile isNumberChar+    pure (raw, filter (/= '_') $ Text.unpack raw)++  {-+    exponent+      : 'e' ('+' | '-')? integer+  -}+  exponent :: Lexer (Maybe (Text, Int))+  exponent = peek >>= \case+    Just 'e' -> do+      (neg, sign) <- next *> peek >>= \case+        Just '-' -> next $> (True, "-")+        Just '+' -> next $> (False, "+")+        _   -> pure (False, "")+      integer >>= \case+        Just (raw, chs) -> do+          let+            int | neg = negate $ digitsToInteger chs+                | otherwise = digitsToInteger chs+          pure $ Just ("e" <> sign <> raw, fromInteger int)+        Nothing -> throw ErrExpectedExponent+    _ ->+      pure Nothing++  {-+    hexadecimal+      : '0x' [0-9a-fA-F]++  -}+  hexadecimal :: Lexer Token+  hexadecimal = do+    chs <- nextWhile Char.isHexDigit+    if Text.null chs+      then throw ErrExpectedHex+      else pure $ TokInt ("0x" <> chs) $ digitsToIntegerBase 16 $ Text.unpack chs++digitsToInteger :: String -> Integer+digitsToInteger = digitsToIntegerBase 10++digitsToIntegerBase :: Integer -> String -> Integer+digitsToIntegerBase b = foldl' (\n c -> n * b + toInteger (Char.digitToInt c)) 0++digitsToScientific :: String -> String -> (Integer, Int)+digitsToScientific = go 0 . reverse+  where+  go !exp is [] = (digitsToInteger (reverse is), exp)+  go !exp is (f : fs) = go (exp - 1) (f : is) fs++isSymbolChar :: Char -> Bool+isSymbolChar c = (c `elem` (":!#$%&*+./<=>?@\\^|-~" :: String)) || (not (Char.isAscii c) && Char.isSymbol c)++isReservedSymbolError :: ParserErrorType -> Bool+isReservedSymbolError = (== ErrReservedSymbol)++isReservedSymbol :: Text -> Bool+isReservedSymbol = flip elem symbols+  where+  symbols =+    [ "::"+    , "∷"+    , "<-"+    , "←"+    , "->"+    , "→"+    , "=>"+    , "⇒"+    , "∀"+    , "|"+    , "."+    , "\\"+    , "="+    ]++isIdentStart :: Char -> Bool+isIdentStart c = Char.isLower c || c == '_'++isIdentChar :: Char -> Bool+isIdentChar c = Char.isAlphaNum c || c == '_' || c == '\''++isNumberChar :: Char -> Bool+isNumberChar c = Char.isDigit c || c == '_'++isNormalStringChar :: Char -> Bool+isNormalStringChar c = c /= '"' && c /= '\\' && c /= '\r' && c /= '\n'++isStringGapChar :: Char -> Bool+isStringGapChar c = c == ' ' || c == '\r' || c == '\n'++isLineFeed :: Char -> Bool+isLineFeed c = c == '\r' || c == '\n'++-- | Checks if some identifier is a valid unquoted key.+isUnquotedKey :: Text -> Bool+isUnquotedKey t =+  case Text.uncons t of+    Nothing ->+      False+    Just (hd, tl) ->+      isIdentStart hd && Text.all isIdentChar tl
+ src/Language/PureScript/CST/Monad.hs view
@@ -0,0 +1,185 @@+module Language.PureScript.CST.Monad where++import Prelude++import Data.List (sortOn)+import qualified Data.List.NonEmpty as NE+import Data.Ord (comparing)+import Data.Text (Text)+import Language.PureScript.CST.Errors+import Language.PureScript.CST.Layout+import Language.PureScript.CST.Positions+import Language.PureScript.CST.Types++type LexResult = Either (LexState, ParserError) SourceToken++data LexState = LexState+  { lexPos :: SourcePos+  , lexLeading :: [Comment LineFeed]+  , lexSource :: Text+  , lexStack :: LayoutStack+  } deriving (Show)++data ParserState = ParserState+  { parserBuff :: [LexResult]+  , parserErrors :: [ParserError]+  , parserWarnings :: [ParserWarning]+  } deriving (Show)++-- | A bare bones, CPS'ed `StateT s (Except e) a`.+newtype ParserM e s a =+  Parser (forall r. s -> (s -> e -> r) -> (s -> a -> r) -> r)++type Parser = ParserM ParserError ParserState++instance Functor (ParserM e s) where+  {-# INLINE fmap #-}+  fmap f (Parser k) =+    Parser $ \st kerr ksucc ->+      k st kerr (\st' a -> ksucc st' (f a))++instance Applicative (ParserM e s) where+  {-# INLINE pure #-}+  pure a = Parser $ \st _ k -> k st a+  {-# INLINE (<*>) #-}+  Parser k1 <*> Parser k2 =+    Parser $ \st kerr ksucc ->+      k1 st kerr $ \st' f ->+        k2 st' kerr $ \st'' a ->+          ksucc st'' (f a)++instance Monad (ParserM e s) where+  {-# INLINE return #-}+  return = pure+  {-# INLINE (>>=) #-}+  Parser k1 >>= k2 =+    Parser $ \st kerr ksucc ->+      k1 st kerr $ \st' a -> do+        let Parser k3 = k2 a+        k3 st' kerr ksucc++runParser :: ParserState -> Parser a -> (ParserState, Either (NE.NonEmpty ParserError) a)+runParser st (Parser k) = k st left right+  where+  left st'@ParserState {..} err =+    (st', Left $ NE.sortBy (comparing errRange) $ err NE.:| parserErrors)++  right st'@ParserState {..} res+    | null parserErrors = (st', Right res)+    | otherwise = (st', Left $ NE.fromList $ sortOn errRange parserErrors)++runTokenParser :: Parser a -> [LexResult] -> Either (NE.NonEmpty ParserError) ([ParserWarning], a)+runTokenParser p buff = fmap (warnings,) res+  where+  (ParserState _ _ warnings, res) =+    runParser initialState p++  initialState = ParserState+    { parserBuff = buff+    , parserErrors = []+    , parserWarnings = []+    }++{-# INLINE throw #-}+throw :: e -> ParserM e s a+throw e = Parser $ \st kerr _ -> kerr st e++parseError :: SourceToken -> Parser a+parseError tok = Parser $ \st kerr _ ->+  kerr st $ ParserErrorInfo+    { errRange = tokRange . tokAnn $ tok+    , errToks = [tok]+    , errStack = [] -- TODO parserStack st+    , errType = ErrToken+    }++mkParserError :: LayoutStack -> [SourceToken] -> a -> ParserErrorInfo a+mkParserError stack toks ty =+  ParserErrorInfo+    { errRange =  range+    , errToks = toks+    , errStack = stack+    , errType = ty+    }+  where+  range = case toks of+    [] -> SourceRange (SourcePos 0 0) (SourcePos 0 0)+    _  -> widen (tokRange . tokAnn $ head toks) (tokRange . tokAnn $ last toks)++addFailure :: [SourceToken] -> ParserErrorType -> Parser ()+addFailure toks ty = Parser $ \st _ ksucc ->+  ksucc (st { parserErrors = mkParserError [] toks ty : parserErrors st }) ()++parseFail' :: [SourceToken] -> ParserErrorType -> Parser a+parseFail' toks msg = Parser $ \st kerr _ -> kerr st (mkParserError [] toks msg)++parseFail :: SourceToken -> ParserErrorType -> Parser a+parseFail = parseFail' . pure++addWarning :: [SourceToken] -> ParserWarningType -> Parser ()+addWarning toks ty = Parser $ \st _ ksucc ->+  ksucc (st { parserWarnings = mkParserError [] toks ty : parserWarnings st }) ()++pushBack :: SourceToken -> Parser ()+pushBack tok = Parser $ \st _ ksucc ->+  ksucc (st { parserBuff = Right tok : parserBuff st }) ()++{-# INLINE tryPrefix #-}+tryPrefix :: Parser a -> Parser b -> Parser (Maybe a, b)+tryPrefix (Parser lhs) rhs = Parser $ \st kerr ksucc ->+  lhs st+    (\_ _ -> do+      let Parser k = (Nothing,) <$> rhs+      k st kerr ksucc)+    (\st' res -> do+      let Parser k = (Just res,) <$> rhs+      k st' kerr ksucc)++oneOf :: NE.NonEmpty (Parser a) -> Parser a+oneOf parsers = Parser $ \st kerr ksucc -> do+  let+    prevErrs = parserErrors st+    go (st', Right a) _ = (st', Right a)+    go _ (st', Right a) = (st', Right a)+    go (st1, Left errs1) (st2, Left errs2)+      | errRange (NE.last errs2) > errRange (NE.last errs1) = (st2, Left errs2)+      | otherwise = (st1, Left errs1)+  case foldr1 go $ runParser (st { parserErrors = [] }) <$> parsers of+    (st', Left errs) -> kerr (st' { parserErrors = prevErrs <> NE.tail errs}) $ NE.head errs+    (st', Right res) -> ksucc (st' { parserErrors = prevErrs }) res++manyDelimited :: Token -> Token -> Token -> Parser a -> Parser [a]+manyDelimited open close sep p = do+  _   <- token open+  res <- go1+  _   <- token close+  pure res+  where+  go1 =+    oneOf $ NE.fromList+      [ go2 . pure =<< p+      , pure []+      ]++  go2 acc =+    oneOf $ NE.fromList+      [ token sep *> (go2 . (: acc) =<< p)+      , pure (reverse acc)+      ]++token :: Token -> Parser SourceToken+token t = do+  t' <- munch+  if t == tokValue t'+    then pure t'+    else parseError t'++munch :: Parser SourceToken+munch = Parser $ \state@ParserState {..} kerr ksucc ->+  case parserBuff of+    Right tok : parserBuff' ->+      ksucc (state { parserBuff = parserBuff' }) tok+    Left (_,  err) : _ ->+      kerr state err+    [] ->+      error "Empty input"
+ src/Language/PureScript/CST/Parser.y view
@@ -0,0 +1,811 @@+{+module Language.PureScript.CST.Parser+  ( parseType+  , parseExpr+  , parseDecl+  , parseIdent+  , parseOperator+  , parseModule+  , parseImportDeclP+  , parseDeclP+  , parseExprP+  , parseTypeP+  , parseModuleNameP+  , parseQualIdentP+  , parse+  , PartialResult(..)+  ) where++import Prelude hiding (lex)++import Control.Monad ((<=<), when)+import Data.Bifunctor (second)+import Data.Foldable (foldl', for_, toList)+import qualified Data.List.NonEmpty as NE+import Data.Text (Text)+import Data.Traversable (for, sequence)+import Language.PureScript.CST.Errors+import Language.PureScript.CST.Flatten (flattenType)+import Language.PureScript.CST.Lexer+import Language.PureScript.CST.Monad+import Language.PureScript.CST.Positions+import Language.PureScript.CST.Types+import Language.PureScript.CST.Utils+import qualified Language.PureScript.Names as N+import qualified Language.PureScript.Roles as R+import Language.PureScript.PSString (PSString)+}++%expect 0++%name parseType type+%name parseExpr expr+%name parseIdent ident+%name parseOperator op+%name parseModuleBody moduleBody+%name parseDecl decl+%partial parseImportDeclP importDeclP+%partial parseDeclP declP+%partial parseExprP exprP+%partial parseTypeP typeP+%partial parseModuleNameP moduleNameP+%partial parseQualIdentP qualIdentP+%partial parseModuleHeader moduleHeader+%partial parseDoStatement doStatement+%partial parseDoExpr doExpr+%partial parseDoNext doNext+%partial parseGuardExpr guardExpr+%partial parseGuardNext guardNext+%partial parseGuardStatement guardStatement+%partial parseClassSignature classSignature+%partial parseClassSuper classSuper+%partial parseClassNameAndFundeps classNameAndFundeps+%partial parseBinderAndArrow binderAndArrow+%tokentype { SourceToken }+%monad { Parser }+%error { parseError }+%lexer { lexer } { SourceToken _ TokEof }++%token+  '('                { SourceToken _ TokLeftParen }+  ')'                { SourceToken _ TokRightParen }+  '{'                { SourceToken _ TokLeftBrace }+  '}'                { SourceToken _ TokRightBrace }+  '['                { SourceToken _ TokLeftSquare }+  ']'                { SourceToken _ TokRightSquare }+  '\{'               { SourceToken _ TokLayoutStart }+  '\}'               { SourceToken _ TokLayoutEnd }+  '\;'               { SourceToken _ TokLayoutSep }+  '<-'               { SourceToken _ (TokLeftArrow _) }+  '->'               { SourceToken _ (TokRightArrow _) }+  '<='               { SourceToken _ (TokOperator [] sym) | isLeftFatArrow sym }+  '=>'               { SourceToken _ (TokRightFatArrow _) }+  ':'                { SourceToken _ (TokOperator [] ":") }+  '::'               { SourceToken _ (TokDoubleColon _) }+  '='                { SourceToken _ TokEquals }+  '|'                { SourceToken _ TokPipe }+  '`'                { SourceToken _ TokTick }+  '.'                { SourceToken _ TokDot }+  ','                { SourceToken _ TokComma }+  '_'                { SourceToken _ TokUnderscore }+  '\\'               { SourceToken _ TokBackslash }+  '-'                { SourceToken _ (TokOperator [] "-") }+  '@'                { SourceToken _ (TokOperator [] "@") }+  'ado'              { SourceToken _ (TokLowerName _ "ado") }+  'as'               { SourceToken _ (TokLowerName [] "as") }+  'case'             { SourceToken _ (TokLowerName [] "case") }+  'class'            { SourceToken _ (TokLowerName [] "class") }+  'data'             { SourceToken _ (TokLowerName [] "data") }+  'derive'           { SourceToken _ (TokLowerName [] "derive") }+  'do'               { SourceToken _ (TokLowerName _ "do") }+  'else'             { SourceToken _ (TokLowerName [] "else") }+  'false'            { SourceToken _ (TokLowerName [] "false") }+  'forall'           { SourceToken _ (TokForall ASCII) }+  'forallu'          { SourceToken _ (TokForall Unicode) }+  'foreign'          { SourceToken _ (TokLowerName [] "foreign") }+  'hiding'           { SourceToken _ (TokLowerName [] "hiding") }+  'import'           { SourceToken _ (TokLowerName [] "import") }+  'if'               { SourceToken _ (TokLowerName [] "if") }+  'in'               { SourceToken _ (TokLowerName [] "in") }+  'infix'            { SourceToken _ (TokLowerName [] "infix") }+  'infixl'           { SourceToken _ (TokLowerName [] "infixl") }+  'infixr'           { SourceToken _ (TokLowerName [] "infixr") }+  'instance'         { SourceToken _ (TokLowerName [] "instance") }+  'let'              { SourceToken _ (TokLowerName [] "let") }+  'module'           { SourceToken _ (TokLowerName [] "module") }+  'newtype'          { SourceToken _ (TokLowerName [] "newtype") }+  'nominal'          { SourceToken _ (TokLowerName [] "nominal") }+  'phantom'          { SourceToken _ (TokLowerName [] "phantom") }+  'of'               { SourceToken _ (TokLowerName [] "of") }+  'representational' { SourceToken _ (TokLowerName [] "representational") }+  'role'             { SourceToken _ (TokLowerName [] "role") }+  'then'             { SourceToken _ (TokLowerName [] "then") }+  'true'             { SourceToken _ (TokLowerName [] "true") }+  'type'             { SourceToken _ (TokLowerName [] "type") }+  'where'            { SourceToken _ (TokLowerName [] "where") }+  '(->)'             { SourceToken _ (TokSymbolArr _) }+  '(..)'             { SourceToken _ (TokSymbolName [] "..") }+  LOWER              { SourceToken _ (TokLowerName [] _) }+  QUAL_LOWER         { SourceToken _ (TokLowerName _ _) }+  UPPER              { SourceToken _ (TokUpperName [] _) }+  QUAL_UPPER         { SourceToken _ (TokUpperName _ _) }+  SYMBOL             { SourceToken _ (TokSymbolName [] _) }+  QUAL_SYMBOL        { SourceToken _ (TokSymbolName _ _) }+  OPERATOR           { SourceToken _ (TokOperator [] _) }+  QUAL_OPERATOR      { SourceToken _ (TokOperator _ _) }+  LIT_HOLE           { SourceToken _ (TokHole _) }+  LIT_CHAR           { SourceToken _ (TokChar _ _) }+  LIT_STRING         { SourceToken _ (TokString _ _) }+  LIT_RAW_STRING     { SourceToken _ (TokRawString _) }+  LIT_INT            { SourceToken _ (TokInt _ _) }+  LIT_NUMBER         { SourceToken _ (TokNumber _ _) }++%%++many(a) :: { NE.NonEmpty a }+  : many1(a) %shift { NE.reverse $1 }++many1(a) :: { NE.NonEmpty a }+  : a { pure $1 }+  | many1(a) a { NE.cons $2 $1 }++manySep(a, sep) :: { NE.NonEmpty a }+  : manySep1(a, sep) { NE.reverse $1 }++manySep1(a, sep) :: { NE.NonEmpty a }+  : a { pure $1 }+  | manySep1(a, sep) sep a { NE.cons $3 $1 }++manySepOrEmpty(a, sep) :: { [a] }+  : {- empty -} { [] }+  | manySep(a, sep) { NE.toList $1 }++manyOrEmpty(a) :: { [a] }+  : {- empty -} { [] }+  | many(a) { NE.toList $1 }++sep(a, s) :: { Separated a }+  : sep1(a, s) { separated $1 }++sep1(a, s) :: { [(SourceToken, a)] }+  : a %shift { [(placeholder, $1)] }+  | sep1(a, s) s a { ($2, $3) : $1 }++delim(a, b, c, d) :: { Delimited b }+  : a d { Wrapped $1 Nothing $2 }+  | a sep(b, c) d { Wrapped $1 (Just $2) $3 }++moduleName :: { Name N.ModuleName }+  : UPPER {% upperToModuleName $1 }+  | QUAL_UPPER {% upperToModuleName $1 }++qualProperName :: { QualifiedProperName }+  : UPPER {% qualifiedProperName <\$> toQualifiedName N.ProperName $1 }+  | QUAL_UPPER {% qualifiedProperName <\$> toQualifiedName N.ProperName $1 }++properName :: { ProperName }+  : UPPER {% properName <\$> toName N.ProperName $1 }++qualIdent :: { QualifiedName Ident }+  : LOWER {% toQualifiedName Ident $1 }+  | QUAL_LOWER {% toQualifiedName Ident $1 }+  | 'as' {% toQualifiedName Ident $1 }+  | 'hiding' {% toQualifiedName Ident $1 }+  | 'role' {% toQualifiedName Ident $1 }+  | 'nominal' {% toQualifiedName Ident $1 }+  | 'representational' {% toQualifiedName Ident $1 }+  | 'phantom' {% toQualifiedName Ident $1 }++ident :: { Name Ident }+  : LOWER {% toName Ident $1 }+  | 'as' {% toName Ident $1 }+  | 'hiding' {% toName Ident $1 }+  | 'role' {% toName Ident $1 }+  | 'nominal' {% toName Ident $1 }+  | 'representational' {% toName Ident $1 }+  | 'phantom' {% toName Ident $1 }++qualOp :: { QualifiedOpName }+  : OPERATOR {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }+  | QUAL_OPERATOR {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }+  | '<=' {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }+  | '-' {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }+  | ':' {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }++op :: { OpName }+  : OPERATOR {% opName <\$> toName N.OpName $1 }+  | '<=' {% opName <\$> toName N.OpName $1 }+  | '-' {% opName <\$> toName N.OpName $1 }+  | ':' {% opName <\$> toName N.OpName $1 }++qualSymbol :: { QualifiedOpName }+  : SYMBOL {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }+  | QUAL_SYMBOL {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }+  | '(..)' {% qualifiedOpName <\$> toQualifiedName N.OpName $1 }++symbol :: { OpName }+  : SYMBOL {% opName <\$> toName N.OpName $1 }+  | '(..)' {% opName <\$> toName N.OpName $1 }++label :: { Label }+  : LOWER { toLabel $1 }+  | LIT_STRING { toLabel $1 }+  | LIT_RAW_STRING { toLabel $1 }+  | 'ado' { toLabel $1 }+  | 'as' { toLabel $1 }+  | 'case' { toLabel $1 }+  | 'class' { toLabel $1 }+  | 'data' { toLabel $1 }+  | 'derive' { toLabel $1 }+  | 'do' { toLabel $1 }+  | 'else' { toLabel $1 }+  | 'false' { toLabel $1 }+  | 'forall' { toLabel $1 }+  | 'foreign' { toLabel $1 }+  | 'hiding' { toLabel $1 }+  | 'import' { toLabel $1 }+  | 'if' { toLabel $1 }+  | 'in' { toLabel $1 }+  | 'infix' { toLabel $1 }+  | 'infixl' { toLabel $1 }+  | 'infixr' { toLabel $1 }+  | 'instance' { toLabel $1 }+  | 'let' { toLabel $1 }+  | 'module' { toLabel $1 }+  | 'newtype' { toLabel $1 }+  | 'nominal' { toLabel $1 }+  | 'of' { toLabel $1 }+  | 'phantom' { toLabel $1 }+  | 'representational' { toLabel $1 }+  | 'role' { toLabel $1 }+  | 'then' { toLabel $1 }+  | 'true' { toLabel $1 }+  | 'type' { toLabel $1 }+  | 'where' { toLabel $1 }++hole :: { Name Ident }+  : LIT_HOLE {% toName Ident $1 }++string :: { (SourceToken, PSString) }+  : LIT_STRING { toString $1 }+  | LIT_RAW_STRING { toString $1 }++char :: { (SourceToken, Char) }+  : LIT_CHAR { toChar $1 }++number :: { (SourceToken, Either Integer Double) }+  : LIT_INT { toNumber $1 }+  | LIT_NUMBER { toNumber $1 }++int :: { (SourceToken, Integer) }+  : LIT_INT { toInt $1 }++boolean :: { (SourceToken, Bool) }+  : 'true' { toBoolean $1 }+  | 'false' { toBoolean $1 }++type :: { Type () }+  : type1 %shift { $1 }+  | type1 '::' type { TypeKinded () $1 $2 $3 }++type1 :: { Type () }+  : type2 { $1 }+  | forall many(typeVarBinding) '.' type1 { TypeForall () $1 $2 $3 $4 }++type2 :: { Type () }+  : type3 %shift { $1 }+  | type3 '->' type1 { TypeArr () $1 $2 $3 }+  | type3 '=>' type1 {% do cs <- toConstraint $1; pure $ TypeConstrained () cs $2 $3 }++type3 :: { Type () }+  : type4 %shift { $1 }+  | type3 qualOp type4 %shift { TypeOp () $1 (getQualifiedOpName $2) $3 }++type4 :: { Type () }+  : type5 %shift { $1 }+  | '-' int { uncurry (TypeInt () (Just $1)) (second negate $2) }++type5 :: { Type () }+  : typeAtom { $1 }+  | type5 typeAtom { TypeApp () $1 $2 }++typeAtom :: { Type ()}+  : '_' { TypeWildcard () $1 }+  | ident { TypeVar () $1 }+  | qualProperName { TypeConstructor () (getQualifiedProperName $1) }+  | qualSymbol { TypeOpName () (getQualifiedOpName $1) }+  | string { uncurry (TypeString ()) $1 }+  | int { uncurry (TypeInt () Nothing) $1 }+  | hole { TypeHole () $1 }+  | '(->)' { TypeArrName () $1 }+  | '{' row '}' { TypeRecord () (Wrapped $1 $2 $3) }+  | '(' row ')' { TypeRow () (Wrapped $1 $2 $3) }+  | '(' type1 ')' { TypeParens () (Wrapped $1 $2 $3) }+  | '(' typeKindedAtom '::' type ')' { TypeParens () (Wrapped $1 (TypeKinded () $2 $3 $4) $5) }++-- Due to a conflict between row syntax and kinded type syntax, we require+-- kinded type variables to be wrapped in parens. Thus `(a :: Foo)` is always a+-- row, and to annotate `a` with kind `Foo`, one must use `((a) :: Foo)`.+typeKindedAtom :: { Type () }+  : '_' { TypeWildcard () $1 }+  | qualProperName { TypeConstructor () (getQualifiedProperName $1) }+  | qualSymbol { TypeOpName () (getQualifiedOpName $1) }+  | int { uncurry (TypeInt () Nothing) $1 }+  | hole { TypeHole () $1 }+  | '{' row '}' { TypeRecord () (Wrapped $1 $2 $3) }+  | '(' row ')' { TypeRow () (Wrapped $1 $2 $3) }+  | '(' type1 ')' { TypeParens () (Wrapped $1 $2 $3) }+  | '(' typeKindedAtom '::' type ')' { TypeParens () (Wrapped $1 (TypeKinded () $2 $3 $4) $5) }++row :: { Row () }+  : {- empty -} { Row Nothing Nothing }+  | '|' type { Row Nothing (Just ($1, $2)) }+  | sep(rowLabel, ',') { Row (Just $1) Nothing }+  | sep(rowLabel, ',') '|' type { Row (Just $1) (Just ($2, $3)) }++rowLabel :: { Labeled Label (Type ()) }+  : label '::' type { Labeled $1 $2 $3 }++typeVarBinding :: { TypeVarBinding () }+  : ident { TypeVarName $1 }+  | '(' ident '::' type ')' {% checkNoWildcards $4 *> pure (TypeVarKinded (Wrapped $1 (Labeled $2 $3 $4) $5)) }++forall :: { SourceToken }+  : 'forall' { $1 }+  | 'forallu' { $1 }++exprWhere :: { Where () }+  : expr %shift { Where $1 Nothing }+  | expr 'where' '\{' manySep(letBinding, '\;') '\}' { Where $1 (Just ($2, $4)) }++expr :: { Expr () }+  : expr1 %shift { $1 }+  | expr1 '::' type { ExprTyped () $1 $2 $3 }++expr1 :: { Expr () }+  : expr2 %shift { $1 }+  | expr1 qualOp expr2 %shift { ExprOp () $1 (getQualifiedOpName $2) $3 }++expr2 :: { Expr () }+  : expr3 { $1 }+  | expr2 '`' exprBacktick '`' expr3 { ExprInfix () $1 (Wrapped $2 $3 $4) $5 }++exprBacktick :: { Expr () }+  : expr3 { $1 }+  | exprBacktick qualOp expr3 { ExprOp () $1 (getQualifiedOpName $2) $3 }++expr3 :: { Expr () }+  : expr4 %shift { $1 }+  | '-' expr3 { ExprNegate () $1 $2 }++expr4 :: { Expr () }+  : expr5 { $1 }+  | expr4 expr5+      { -- Record application/updates can introduce a function application+        -- associated to the right, so we need to correct it.+        case $2 of+          ExprApp _ lhs rhs ->+            ExprApp () (ExprApp () $1 lhs) rhs+          _ -> ExprApp () $1 $2+      }++expr5 :: { Expr () }+  : expr6 { $1 }+  | 'if' expr 'then' expr 'else' expr { ExprIf () (IfThenElse $1 $2 $3 $4 $5 $6) }+  | doBlock { ExprDo () $1 }+  | adoBlock 'in' expr { ExprAdo () $ uncurry AdoBlock $1 $2 $3 }+  | '\\' many(binderAtom) '->' expr { ExprLambda () (Lambda $1 $2 $3 $4) }+  | 'let' '\{' manySep(letBinding, '\;') '\}' 'in' expr { ExprLet () (LetIn $1 $3 $5 $6) }+  | 'case' sep(expr, ',') 'of' '\{' manySep(caseBranch, '\;') '\}' { ExprCase () (CaseOf $1 $2 $3 $5) }+  -- These special cases handle some idiosynchratic syntax that the current+  -- parser allows. Technically the parser allows the rhs of a case branch to be+  -- at any level, but this is ambiguous. We allow it in the case of a singleton+  -- case, since this is used in the wild.+  | 'case' sep(expr, ',') 'of' '\{' sep(binder1, ',') '->' '\}' exprWhere+      {% addWarning (let (a,b) = whereRange $8 in [a, b]) WarnDeprecatedCaseOfOffsideSyntax *> pure (ExprCase () (CaseOf $1 $2 $3 (pure ($5, Unconditional $6 $8)))) }+  | 'case' sep(expr, ',') 'of' '\{' sep(binder1, ',') '\}' guardedCase+      {% addWarning (let (a,b) = guardedRange $7 in [a, b]) WarnDeprecatedCaseOfOffsideSyntax *> pure (ExprCase () (CaseOf $1 $2 $3 (pure ($5, $7)))) }++expr6 :: { Expr () }+  : expr7 %shift { $1 }+  | expr7 '{' '}' { ExprApp () $1 (ExprRecord () (Wrapped $2 Nothing $3)) }+  | expr7 '{' sep(recordUpdateOrLabel, ',') '}'+      {% toRecordFields $3 >>= \case+          Left xs -> pure $ ExprApp () $1 (ExprRecord () (Wrapped $2 (Just xs) $4))+          Right xs -> pure $ ExprRecordUpdate () $1 (Wrapped $2 xs $4)+      }++expr7 :: { Expr () }+  : exprAtom { $1 }+  | exprAtom '.' sep(label, '.') { ExprRecordAccessor () (RecordAccessor $1 $2 $3) }++exprAtom :: { Expr () }+  : '_' { ExprSection () $1 }+  | hole { ExprHole () $1 }+  | qualIdent { ExprIdent () $1 }+  | qualProperName { ExprConstructor () (getQualifiedProperName $1) }+  | qualSymbol { ExprOpName () (getQualifiedOpName $1) }+  | boolean { uncurry (ExprBoolean ()) $1 }+  | char { uncurry (ExprChar ()) $1 }+  | string { uncurry (ExprString ()) $1 }+  | number { uncurry (ExprNumber ()) $1 }+  | delim('[', expr, ',', ']') { ExprArray () $1 }+  | delim('{', recordLabel, ',', '}') { ExprRecord () $1 }+  | '(' expr ')' { ExprParens () (Wrapped $1 $2 $3) }++recordLabel :: { RecordLabeled (Expr ()) }+  : label {% fmap RecordPun . toName Ident $ lblTok $1 }+  | label '=' expr {% addFailure [$2] ErrRecordUpdateInCtr *> pure (RecordPun $ unexpectedName $ lblTok $1) }+  | label ':' expr { RecordField $1 $2 $3 }++recordUpdateOrLabel :: { Either (RecordLabeled (Expr ())) (RecordUpdate ()) }+  : label ':' expr { Left (RecordField $1 $2 $3) }+  | label {% fmap (Left . RecordPun) . toName Ident $ lblTok $1 }+  | label '=' expr { Right (RecordUpdateLeaf $1 $2 $3) }+  | label '{' sep(recordUpdate, ',') '}' { Right (RecordUpdateBranch $1 (Wrapped $2 $3 $4)) }++recordUpdate :: { RecordUpdate () }+  : label '=' expr { RecordUpdateLeaf $1 $2 $3 }+  | label '{' sep(recordUpdate, ',') '}' { RecordUpdateBranch $1 (Wrapped $2 $3 $4) }++letBinding :: { LetBinding () }+  : ident '::' type { LetBindingSignature () (Labeled $1 $2 $3) }+  | ident guardedDecl { LetBindingName () (ValueBindingFields $1 [] $2) }+  | ident many(binderAtom) guardedDecl { LetBindingName () (ValueBindingFields $1 (NE.toList $2) $3) }+  | binder1 '=' exprWhere { LetBindingPattern () $1 $2 $3 }++caseBranch :: { (Separated (Binder ()), Guarded ()) }+  : sep(binder1, ',') guardedCase { ($1, $2) }++guardedDecl :: { Guarded () }+  : '=' exprWhere { Unconditional $1 $2 }+  | many(guardedDeclExpr) { Guarded $1 }++guardedDeclExpr :: { GuardedExpr () }+  : guard '=' exprWhere { uncurry GuardedExpr $1 $2 $3 }++guardedCase :: { Guarded () }+  : '->' exprWhere { Unconditional $1 $2 }+  | many(guardedCaseExpr) { Guarded $1 }++guardedCaseExpr :: { GuardedExpr () }+  : guard '->' exprWhere { uncurry GuardedExpr $1 $2 $3 }++-- Do/Ado statements and pattern guards require unbounded lookahead due to many+-- conflicts between `binder` and `expr` syntax. For example `Foo a b c` can+-- either be a constructor `binder` or several `expr` applications, and we won't+-- know until we see a `<-` or layout separator.+--+-- One way to resolve this would be to parse a `binder` as an `expr` and then+-- reassociate it after the fact. However this means we can't use the `binder`+-- productions to parse it, so we'd have to maintain an ad-hoc handwritten+-- parser which is very difficult to audit.+--+-- As an alternative we introduce some backtracking. Using %partial parsers and+-- monadic reductions, we can invoke productions manually and use the+-- backtracking `tryPrefix` combinator. Binders are generally very short in+-- comparison to expressions, so the cost is modest.+--+--     doBlock+--       : 'do' '\{' manySep(doStatement, '\;') '\}'+--+--     doStatement+--       : 'let' '\{' manySep(letBinding, '\;') '\}'+--       | expr+--       | binder '<-' expr+--+--     guard+--       : '|' sep(patternGuard, ',')+--+--     patternGuard+--       : expr1+--       | binder '<-' expr1+--+doBlock :: { DoBlock () }+  : 'do' '\{'+      {%% revert $ do+        res <- parseDoStatement+        when (null res) $ addFailure [$2] ErrEmptyDo+        pure $ DoBlock $1 $ NE.fromList res+      }++adoBlock :: { (SourceToken, [DoStatement ()]) }+  : 'ado' '\{' '\}' { ($1, []) }+  | 'ado' '\{'+      {%% revert $ fmap ($1,) parseDoStatement }++doStatement :: { [DoStatement ()] }+  : 'let' '\{' manySep(letBinding, '\;') '\}'+      {%^ revert $ fmap (DoLet $1 $3 :) parseDoNext }+  | {- empty -}+      {%^ revert $ do+        stmt <- tryPrefix parseBinderAndArrow parseDoExpr+        let+          ctr = case stmt of+            (Just (binder, sep), expr) ->+              (DoBind binder sep expr :)+            (Nothing, expr) ->+              (DoDiscard expr :)+        fmap ctr parseDoNext+      }++doExpr :: { Expr () }+  : expr {%^ revert $ pure $1 }++doNext :: { [DoStatement ()] }+  : '\;' {%^ revert parseDoStatement }+  | '\}' {%^ revert $ pure [] }++guard :: { (SourceToken, Separated (PatternGuard ())) }+  : '|' {%% revert $ fmap (($1,) . uncurry Separated) parseGuardStatement }++guardStatement :: { (PatternGuard (), [(SourceToken, PatternGuard ())]) }+  : {- empty -}+      {%^ revert $ do+        grd <- fmap (uncurry PatternGuard) $ tryPrefix parseBinderAndArrow parseGuardExpr+        fmap (grd,) parseGuardNext+      }++guardExpr :: { Expr() }+  : expr1 {%^ revert $ pure $1 }++guardNext :: { [(SourceToken, PatternGuard ())] }+  : ',' {%^ revert $ fmap (\(g, gs) -> ($1, g) : gs) parseGuardStatement }+  | {- empty -} {%^ revert $ pure [] }++binderAndArrow :: { (Binder (), SourceToken) }+  : binder '<-' {%^ revert $ pure ($1, $2) }++binder :: { Binder () }+  : binder1 { $1 }+  | binder1 '::' type { BinderTyped () $1 $2 $3 }++binder1 :: { Binder () }+  : binder2 { $1 }+  | binder1 qualOp binder2 { BinderOp () $1 (getQualifiedOpName $2) $3 }++binder2 :: { Binder () }+  : many(binderAtom) {% toBinderConstructor $1 }+  | '-' number { uncurry (BinderNumber () (Just $1)) $2 }++binderAtom :: { Binder () }+  : '_' { BinderWildcard () $1 }+  | ident %shift { BinderVar () $1 }+  | ident '@' binderAtom { BinderNamed () $1 $2 $3 }+  | qualProperName { BinderConstructor () (getQualifiedProperName $1) [] }+  | boolean { uncurry (BinderBoolean ()) $1 }+  | char { uncurry (BinderChar ()) $1 }+  | string { uncurry (BinderString ()) $1 }+  | number { uncurry (BinderNumber () Nothing) $1 }+  | delim('[', binder, ',', ']') { BinderArray () $1 }+  | delim('{', recordBinder, ',', '}') { BinderRecord () $1 }+  | '(' binder ')' { BinderParens () (Wrapped $1 $2 $3) }++recordBinder :: { RecordLabeled (Binder ()) }+  : label {% fmap RecordPun . toName Ident $ lblTok $1 }+  | label '=' binder {% addFailure [$2] ErrRecordUpdateInCtr *> pure (RecordPun $ unexpectedName $ lblTok $1) }+  | label ':' binder { RecordField $1 $2 $3 }++-- By splitting up the module header from the body, we can incrementally parse+-- just the header, and then continue parsing the body while still sharing work.+moduleHeader :: { Module () }+  : 'module' moduleName exports 'where' '\{' moduleImports+      { (Module () $1 $2 $3 $4 $6 [] []) }++moduleBody :: { ([Declaration ()], [Comment LineFeed]) }+  : moduleDecls '\}'+      {%^ \(SourceToken ann _) -> pure (snd $1, tokLeadingComments ann) }++moduleImports :: { [ImportDecl ()] }+  : importDecls importDecl '\}'+      {%^ revert $ pushBack $3 *> pure (reverse ($2 : $1)) }+  | importDecls+      {%^ revert $ pure (reverse $1) }++importDecls :: { [ImportDecl ()] }+  : importDecls importDecl '\;' { $2 : $1 }+  | {- empty -} { [] }++moduleDecls :: { ([ImportDecl ()], [Declaration ()]) }+  : manySep(moduleDecl, '\;') {% toModuleDecls $ NE.toList $1 }+  | {- empty -} { ([], []) }++moduleDecl :: { TmpModuleDecl () }+  : importDecl { TmpImport $1 }+  | sep(decl, declElse) { TmpChain $1 }++declElse :: { SourceToken }+  : 'else' { $1 }+  | 'else' '\;' { $1 }++exports :: { Maybe (DelimitedNonEmpty (Export ())) }+  : {- empty -} { Nothing }+  | '(' sep(export, ',') ')' { Just (Wrapped $1 $2 $3) }++export :: { Export () }+  : ident { ExportValue () $1 }+  | symbol { ExportOp () (getOpName $1) }+  | properName { ExportType () (getProperName $1) Nothing }+  | properName dataMembers { ExportType () (getProperName $1) (Just $2) }+  | 'type' symbol { ExportTypeOp () $1 (getOpName $2) }+  | 'class' properName { ExportClass () $1 (getProperName $2) }+  | 'module' moduleName { ExportModule () $1 $2 }++dataMembers :: { (DataMembers ()) }+ : '(..)' { DataAll () $1 }+ | '(' ')' { DataEnumerated () (Wrapped $1 Nothing $2) }+ | '(' sep(properName, ',') ')' { DataEnumerated () (Wrapped $1 (Just \$ getProperName <\$> $2) $3) }++importDecl :: { ImportDecl () }+  : 'import' moduleName imports { ImportDecl () $1 $2 $3 Nothing }+  | 'import' moduleName imports 'as' moduleName { ImportDecl () $1 $2 $3 (Just ($4, $5)) }++imports :: { Maybe (Maybe SourceToken, DelimitedNonEmpty (Import ())) }+  : {- empty -} { Nothing }+  | '(' sep(import, ',') ')' { Just (Nothing, Wrapped $1 $2 $3) }+  | 'hiding' '(' sep(import, ',') ')' { Just (Just $1, Wrapped $2 $3 $4) }++import :: { Import () }+  : ident { ImportValue () $1 }+  | symbol { ImportOp () (getOpName $1) }+  | properName { ImportType () (getProperName $1) Nothing }+  | properName dataMembers { ImportType () (getProperName $1) (Just $2) }+  | 'type' symbol { ImportTypeOp () $1 (getOpName $2) }+  | 'class' properName { ImportClass () $1 (getProperName $2) }++decl :: { Declaration () }+  : dataHead { DeclData () $1 Nothing }+  | dataHead '=' sep(dataCtor, '|') { DeclData () $1 (Just ($2, $3)) }+  | typeHead '=' type {% checkNoWildcards $3 *> pure (DeclType () $1 $2 $3) }+  | newtypeHead '=' properName typeAtom {% checkNoWildcards $4 *> pure (DeclNewtype () $1 $2 (getProperName $3) $4) }+  | classHead { either id (\h -> DeclClass () h Nothing) $1 }+  | classHead 'where' '\{' manySep(classMember, '\;') '\}' {% either (const (parseError $2)) (\h -> pure $ DeclClass () h (Just ($2, $4))) $1 }+  | instHead { DeclInstanceChain () (Separated (Instance $1 Nothing) []) }+  | instHead 'where' '\{' manySep(instBinding, '\;') '\}' { DeclInstanceChain () (Separated (Instance $1 (Just ($2, $4))) []) }+  | 'data' properName '::' type {% checkNoWildcards $4 *> pure (DeclKindSignature () $1 (Labeled (getProperName $2) $3 $4)) }+  | 'newtype' properName '::' type {% checkNoWildcards $4 *> pure (DeclKindSignature () $1 (Labeled (getProperName $2) $3 $4)) }+  | 'type' properName '::' type {% checkNoWildcards $4 *> pure (DeclKindSignature () $1 (Labeled (getProperName $2) $3 $4)) }+  | 'derive' instHead { DeclDerive () $1 Nothing $2 }+  | 'derive' 'newtype' instHead { DeclDerive () $1 (Just $2) $3 }+  | ident '::' type { DeclSignature () (Labeled $1 $2 $3) }+  | ident manyOrEmpty(binderAtom) guardedDecl { DeclValue () (ValueBindingFields $1 $2 $3) }+  | fixity { DeclFixity () $1 }+  | 'foreign' 'import' ident '::' type {% when (isConstrained $5) (addFailure ([$1, $2, nameTok $3, $4] <> toList (flattenType $5)) ErrConstraintInForeignImportSyntax) *> pure (DeclForeign () $1 $2 (ForeignValue (Labeled $3 $4 $5))) }+  | 'foreign' 'import' 'data' properName '::' type { DeclForeign () $1 $2 (ForeignData $3 (Labeled (getProperName $4) $5 $6)) }+  | 'type' 'role' properName many(role) { DeclRole () $1 $2 (getProperName $3) $4 }++dataHead :: { DataHead () }+  : 'data' properName manyOrEmpty(typeVarBinding) { DataHead $1 (getProperName $2) $3 }++typeHead :: { DataHead () }+  : 'type' properName manyOrEmpty(typeVarBinding) { DataHead $1 (getProperName $2) $3 }++newtypeHead :: { DataHead () }+  : 'newtype' properName manyOrEmpty(typeVarBinding) { DataHead $1 (getProperName $2) $3 }++dataCtor :: { DataCtor () }+  : properName manyOrEmpty(typeAtom)+      {% for_ $2 checkNoWildcards *> pure (DataCtor () (getProperName $1) $2) }++-- Class head syntax requires unbounded lookahead due to a conflict between+-- row syntax and `typeVarBinding`. `(a :: B)` is either a row in `constraint`+-- where `B` is a type or a `typeVarBinding` where `B` is a kind. We must see+-- either a `<=`, `where`, or layout delimiter before deciding which it is.+--+--     classHead+--       : 'class' classNameAndFundeps+--       | 'class' constraints '<=' classNameAndFundeps+--+classHead :: { Either (Declaration ()) (ClassHead ()) }+  : 'class'+      {%% revert $ oneOf $ NE.fromList+          [ fmap (Left . DeclKindSignature () $1) parseClassSignature+          , do+              (super, (name, vars, fundeps)) <- tryPrefix parseClassSuper parseClassNameAndFundeps+              let hd = ClassHead $1 super name vars fundeps+              checkFundeps hd+              pure $ Right hd+          ]+      }++classSignature :: { Labeled (Name (N.ProperName 'N.TypeName)) (Type ()) }+  : properName '::' type {%^ revert $ checkNoWildcards $3 *> pure (Labeled (getProperName $1) $2 $3) }++classSuper :: { (OneOrDelimited (Constraint ()), SourceToken) }+  : constraints '<=' {%^ revert $ pure ($1, $2) }++classNameAndFundeps :: { (Name (N.ProperName 'N.ClassName), [TypeVarBinding ()], Maybe (SourceToken, Separated ClassFundep)) }+  : properName manyOrEmpty(typeVarBinding) fundeps {%^ revert $ pure (getProperName $1, $2, $3) }++fundeps :: { Maybe (SourceToken, Separated ClassFundep) }+  : {- empty -} { Nothing }+  | '|' sep(fundep, ',') { Just ($1, $2) }++fundep :: { ClassFundep }+  : '->' many(ident) { FundepDetermined $1 $2 }+  | many(ident) '->' many(ident) { FundepDetermines $1 $2 $3 }++classMember :: { Labeled (Name Ident) (Type ()) }+  : ident '::' type {% checkNoWildcards $3 *> pure (Labeled $1 $2 $3) }++instHead :: { InstanceHead () }+  : 'instance' constraints '=>' qualProperName manyOrEmpty(typeAtom)+      { InstanceHead $1 Nothing (Just ($2, $3)) (getQualifiedProperName $4) $5 }+  | 'instance' qualProperName manyOrEmpty(typeAtom)+      { InstanceHead $1 Nothing Nothing (getQualifiedProperName $2) $3 }+  | 'instance' ident '::' constraints '=>' qualProperName manyOrEmpty(typeAtom)+      { InstanceHead $1 (Just ($2, $3)) (Just ($4, $5)) (getQualifiedProperName $6) $7 }+  | 'instance' ident '::' qualProperName manyOrEmpty(typeAtom)+      { InstanceHead $1 (Just ($2, $3)) Nothing (getQualifiedProperName $4) $5 }++constraints :: { OneOrDelimited (Constraint ()) }+  : constraint { One $1 }+  | '(' sep(constraint, ',') ')' { Many (Wrapped $1 $2 $3) }++constraint :: { Constraint () }+  : qualProperName manyOrEmpty(typeAtom) {% for_ $2 checkNoWildcards *> for_ $2 checkNoForalls *> pure (Constraint () (getQualifiedProperName $1) $2) }+  | '(' constraint ')' { ConstraintParens () (Wrapped $1 $2 $3) }++instBinding :: { InstanceBinding () }+  : ident '::' type { InstanceBindingSignature () (Labeled $1 $2 $3) }+  | ident manyOrEmpty(binderAtom) guardedDecl { InstanceBindingName () (ValueBindingFields $1 $2 $3) }++fixity :: { FixityFields }+  : infix int qualIdent 'as' op { FixityFields $1 $2 (FixityValue (fmap Left $3) $4 (getOpName $5)) }+  | infix int qualProperName 'as' op { FixityFields $1 $2 (FixityValue (fmap Right (getQualifiedProperName $3)) $4 (getOpName $5)) }+  | infix int 'type' qualProperName 'as' op { FixityFields $1 $2 (FixityType $3 (getQualifiedProperName $4) $5 (getOpName $6)) }++infix :: { (SourceToken, Fixity) }+  : 'infix' { ($1, Infix) }+  | 'infixl' { ($1, Infixl) }+  | 'infixr' { ($1, Infixr) }++role :: { Role }+  : 'nominal' { Role $1 R.Nominal }+  | 'representational' { Role $1 R.Representational }+  | 'phantom' { Role $1 R.Phantom }++-- Partial parsers which can be combined with combinators for adhoc use. We need+-- to revert the lookahead token so that it doesn't consume an extra token+-- before succeeding.++importDeclP :: { ImportDecl () }+  : importDecl {%^ revert $ pure $1 }++declP :: { Declaration () }+  : decl {%^ revert $ pure $1 }++exprP :: { Expr () }+  : expr {%^ revert $ pure $1 }++typeP :: { Type () }+  : type {%^ revert $ pure $1 }++moduleNameP :: { Name N.ModuleName }+  : moduleName {%^ revert $ pure $1 }++qualIdentP :: { QualifiedName Ident }+  : qualIdent {%^ revert $ pure $1 }++{+lexer :: (SourceToken -> Parser a) -> Parser a+lexer k = munch >>= k++parse :: Text -> ([ParserWarning], Either (NE.NonEmpty ParserError) (Module ()))+parse = either (([],) . Left) resFull . parseModule . lex++data PartialResult a = PartialResult+  { resPartial :: a+  , resFull :: ([ParserWarning], Either (NE.NonEmpty ParserError) a)+  } deriving (Functor)++parseModule :: [LexResult] -> Either (NE.NonEmpty ParserError) (PartialResult (Module ()))+parseModule toks = fmap (\header -> PartialResult header (parseFull header)) headerRes+  where+  (st, headerRes) =+    runParser (ParserState toks [] []) parseModuleHeader++  parseFull header = do+    let (ParserState _ _ warnings, res) = runParser st parseModuleBody+    (warnings, (\(decls, trailing) -> header { modDecls = decls, modTrailingComments = trailing }) <$> res)+}
+ src/Language/PureScript/CST/Positions.hs view
@@ -0,0 +1,337 @@+-- | This module contains utilities for calculating positions and offsets. While+-- tokens are annotated with ranges, CST nodes are not, but they can be+-- dynamically derived with the functions in this module, which will return the+-- first and last tokens for a given node.++module Language.PureScript.CST.Positions where++import Prelude++import Data.Foldable (foldl')+import qualified Data.List.NonEmpty as NE+import Data.Maybe (fromMaybe)+import Data.Text (Text)+import Data.Void (Void)+import qualified Data.Text as Text+import Language.PureScript.CST.Types++advanceToken :: SourcePos -> Token -> SourcePos+advanceToken pos = applyDelta pos . tokenDelta++advanceLeading :: SourcePos -> [Comment LineFeed] -> SourcePos+advanceLeading = foldl' $ \a -> applyDelta a . commentDelta lineDelta++advanceTrailing :: SourcePos -> [Comment Void] -> SourcePos+advanceTrailing = foldl' $ \a -> applyDelta a . commentDelta (const (0, 0))++tokenDelta :: Token -> (Int, Int)+tokenDelta = \case+  TokLeftParen             -> (0, 1)+  TokRightParen            -> (0, 1)+  TokLeftBrace             -> (0, 1)+  TokRightBrace            -> (0, 1)+  TokLeftSquare            -> (0, 1)+  TokRightSquare           -> (0, 1)+  TokLeftArrow ASCII       -> (0, 2)+  TokLeftArrow Unicode     -> (0, 1)+  TokRightArrow ASCII      -> (0, 2)+  TokRightArrow Unicode    -> (0, 1)+  TokRightFatArrow ASCII   -> (0, 2)+  TokRightFatArrow Unicode -> (0, 1)+  TokDoubleColon ASCII     -> (0, 2)+  TokDoubleColon Unicode   -> (0, 1)+  TokForall ASCII          -> (0, 6)+  TokForall Unicode        -> (0, 1)+  TokEquals                -> (0, 1)+  TokPipe                  -> (0, 1)+  TokTick                  -> (0, 1)+  TokDot                   -> (0, 1)+  TokComma                 -> (0, 1)+  TokUnderscore            -> (0, 1)+  TokBackslash             -> (0, 1)+  TokLowerName qual name   -> (0, qualDelta qual + Text.length name)+  TokUpperName qual name   -> (0, qualDelta qual + Text.length name)+  TokOperator qual sym     -> (0, qualDelta qual + Text.length sym)+  TokSymbolName qual sym   -> (0, qualDelta qual + Text.length sym + 2)+  TokSymbolArr Unicode     -> (0, 3)+  TokSymbolArr ASCII       -> (0, 4)+  TokHole hole             -> (0, Text.length hole + 1)+  TokChar raw _            -> (0, Text.length raw + 2)+  TokInt raw _             -> (0, Text.length raw)+  TokNumber raw _          -> (0, Text.length raw)+  TokString raw _          -> multiLine 1 $ textDelta raw+  TokRawString raw         -> multiLine 3 $ textDelta raw+  TokLayoutStart           -> (0, 0)+  TokLayoutSep             -> (0, 0)+  TokLayoutEnd             -> (0, 0)+  TokEof                   -> (0, 0)++qualDelta :: [Text] -> Int+qualDelta = foldr ((+) . (+ 1) . Text.length) 0++multiLine :: Int -> (Int, Int) -> (Int, Int)+multiLine n (0, c) = (0, c + n + n)+multiLine n (l, c) = (l, c + n)++commentDelta :: (a -> (Int, Int)) -> Comment a -> (Int, Int)+commentDelta k = \case+  Comment raw -> textDelta raw+  Space n -> (0, n)+  Line a -> k a++lineDelta :: LineFeed -> (Int, Int)+lineDelta _ = (1, 1)++textDelta :: Text -> (Int, Int)+textDelta = Text.foldl' go (0, 0)+  where+  go (!l, !c) = \case+    '\n' -> (l + 1, 1)+    _    -> (l, c + 1)++applyDelta :: SourcePos -> (Int, Int) -> SourcePos+applyDelta (SourcePos l c) = \case+  (0, n) -> SourcePos l (c + n)+  (k, d) -> SourcePos (l + k) d++sepLast :: Separated a -> a+sepLast (Separated hd []) = hd+sepLast (Separated _ tl) = snd $ last tl++type TokenRange = (SourceToken, SourceToken)++toSourceRange :: TokenRange -> SourceRange+toSourceRange (a, b) = widen (srcRange a) (srcRange b)++widen :: SourceRange -> SourceRange -> SourceRange+widen (SourceRange s1 _) (SourceRange _ e2) = SourceRange s1 e2++srcRange :: SourceToken -> SourceRange+srcRange = tokRange . tokAnn++nameRange :: Name a -> TokenRange+nameRange a = (nameTok a, nameTok a)++qualRange :: QualifiedName a -> TokenRange+qualRange a = (qualTok a, qualTok a)++wrappedRange :: Wrapped a -> TokenRange+wrappedRange Wrapped { wrpOpen, wrpClose } = (wrpOpen, wrpClose)++moduleRange :: Module a -> TokenRange+moduleRange Module { modKeyword, modWhere, modImports, modDecls } =+  case (modImports, modDecls) of+    ([], []) -> (modKeyword, modWhere)+    (is, []) -> (modKeyword, snd . importDeclRange $ last is)+    (_,  ds) -> (modKeyword, snd . declRange $ last ds)++exportRange :: Export a -> TokenRange+exportRange = \case+  ExportValue _ a -> nameRange a+  ExportOp _ a -> nameRange a+  ExportType _ a b+    | Just b' <- b -> (nameTok a, snd $ dataMembersRange b')+    | otherwise -> nameRange a+  ExportTypeOp _ a b -> (a, nameTok b)+  ExportClass _ a b -> (a, nameTok b)+  ExportModule _ a b -> (a, nameTok b)++importDeclRange :: ImportDecl a -> TokenRange+importDeclRange ImportDecl { impKeyword, impModule, impNames, impQual }+  | Just (_, modName) <- impQual = (impKeyword, nameTok modName)+  | Just (_, imports) <- impNames = (impKeyword, wrpClose imports)+  | otherwise = (impKeyword, nameTok impModule)++importRange :: Import a -> TokenRange+importRange = \case+  ImportValue _ a -> nameRange a+  ImportOp _ a -> nameRange a+  ImportType _ a b+    | Just b' <- b -> (nameTok a, snd $ dataMembersRange b')+    | otherwise -> nameRange a+  ImportTypeOp _ a b -> (a, nameTok b)+  ImportClass _ a b -> (a, nameTok b)++dataMembersRange :: DataMembers a -> TokenRange+dataMembersRange = \case+  DataAll _ a -> (a, a)+  DataEnumerated _ (Wrapped a _ b) -> (a, b)++declRange :: Declaration a -> TokenRange+declRange = \case+  DeclData _ hd ctors+    | Just (_, cs) <- ctors -> (fst start, snd . dataCtorRange $ sepLast cs)+    | otherwise -> start+    where start = dataHeadRange hd+  DeclType _ a _ b -> (fst $ dataHeadRange a,  snd $ typeRange b)+  DeclNewtype _ a _ _ b -> (fst $ dataHeadRange a, snd $ typeRange b)+  DeclClass _ hd body+    | Just (_, ts) <- body -> (fst start, snd . typeRange . lblValue $ NE.last ts)+    | otherwise -> start+    where start = classHeadRange hd+  DeclInstanceChain _ a -> (fst . instanceRange $ sepHead a, snd . instanceRange $ sepLast a)+  DeclDerive _ a _ b -> (a, snd $ instanceHeadRange b)+  DeclKindSignature _ a (Labeled _ _ b) -> (a, snd $ typeRange b)+  DeclSignature _ (Labeled a _ b) -> (nameTok a, snd $ typeRange b)+  DeclValue _ a -> valueBindingFieldsRange a+  DeclFixity _ (FixityFields a _ (FixityValue _ _ b)) -> (fst a, nameTok b)+  DeclFixity _ (FixityFields a _ (FixityType _ _ _ b)) -> (fst a, nameTok b)+  DeclForeign _ a _ b -> (a, snd $ foreignRange b)+  DeclRole _ a _ _ b -> (a, roleTok $ NE.last b)++dataHeadRange :: DataHead a -> TokenRange+dataHeadRange (DataHead kw name vars)+  | [] <- vars = (kw, nameTok name)+  | otherwise = (kw, snd . typeVarBindingRange $ last vars)++dataCtorRange :: DataCtor a -> TokenRange+dataCtorRange (DataCtor _ name fields)+  | [] <- fields = nameRange name+  | otherwise = (nameTok name, snd . typeRange $ last fields)++classHeadRange :: ClassHead a -> TokenRange+classHeadRange (ClassHead kw _ name vars fdeps)+  | Just (_, fs) <- fdeps = (kw, snd .classFundepRange $ sepLast fs)+  | [] <- vars = (kw, snd $ nameRange name)+  | otherwise = (kw, snd . typeVarBindingRange $ last vars)++classFundepRange :: ClassFundep -> TokenRange+classFundepRange = \case+  FundepDetermined arr bs -> (arr, nameTok $ NE.last bs)+  FundepDetermines as _ bs -> (nameTok $ NE.head as, nameTok $ NE.last bs)++instanceRange :: Instance a -> TokenRange+instanceRange (Instance hd bd)+  | Just (_, ts) <- bd = (fst start, snd . instanceBindingRange $ NE.last ts)+  | otherwise = start+  where start = instanceHeadRange hd++instanceHeadRange :: InstanceHead a -> TokenRange+instanceHeadRange (InstanceHead kw _ _ cls types)+  | [] <- types = (kw, qualTok cls)+  | otherwise = (kw, snd . typeRange $ last types)++instanceBindingRange :: InstanceBinding a -> TokenRange+instanceBindingRange = \case+  InstanceBindingSignature _ (Labeled a _ b) -> (nameTok a, snd $ typeRange b)+  InstanceBindingName _ a -> valueBindingFieldsRange a++foreignRange :: Foreign a -> TokenRange+foreignRange = \case+  ForeignValue (Labeled a _ b) -> (nameTok a, snd $ typeRange b)+  ForeignData a (Labeled _ _ b) -> (a, snd $ typeRange b)+  ForeignKind a b -> (a, nameTok b)++valueBindingFieldsRange :: ValueBindingFields a -> TokenRange+valueBindingFieldsRange (ValueBindingFields a _ b) = (nameTok a, snd $ guardedRange b)++guardedRange :: Guarded a -> TokenRange+guardedRange = \case+  Unconditional a b -> (a, snd $ whereRange b)+  Guarded as -> (fst . guardedExprRange $ NE.head as, snd . guardedExprRange $ NE.last as)++guardedExprRange :: GuardedExpr a -> TokenRange+guardedExprRange (GuardedExpr a _ _ b) = (a, snd $ whereRange b)++whereRange :: Where a -> TokenRange+whereRange (Where a bs)+  | Just (_, ls) <- bs = (fst $ exprRange a, snd . letBindingRange $ NE.last ls)+  | otherwise = exprRange a++typeRange :: Type a -> TokenRange+typeRange = \case+  TypeVar _ a -> nameRange a+  TypeConstructor _ a -> qualRange a+  TypeWildcard _ a -> (a, a)+  TypeHole _ a -> nameRange a+  TypeString _ a _ -> (a, a)+  TypeInt _ a b _ -> (fromMaybe b a, b)+  TypeRow _ a -> wrappedRange a+  TypeRecord _ a -> wrappedRange a+  TypeForall _ a _ _ b -> (a, snd $ typeRange b)+  TypeKinded _ a _ b -> (fst $ typeRange a, snd $ typeRange b)+  TypeApp _ a b -> (fst $ typeRange a, snd $ typeRange b)+  TypeOp _ a _ b -> (fst $ typeRange a, snd $ typeRange b)+  TypeOpName _ a -> qualRange a+  TypeArr _ a _ b -> (fst $ typeRange a, snd $ typeRange b)+  TypeArrName _ a -> (a, a)+  TypeConstrained _ a _ b -> (fst $ constraintRange a, snd $ typeRange b)+  TypeParens _ a -> wrappedRange a+  TypeUnaryRow _ a b -> (a, snd $ typeRange b)++constraintRange :: Constraint a -> TokenRange+constraintRange = \case+  Constraint _ name args+    | [] <- args -> qualRange name+    | otherwise -> (qualTok name, snd . typeRange $ last args)+  ConstraintParens _ wrp -> wrappedRange wrp++typeVarBindingRange :: TypeVarBinding a -> TokenRange+typeVarBindingRange = \case+  TypeVarKinded a -> wrappedRange a+  TypeVarName a -> nameRange a++exprRange :: Expr a -> TokenRange+exprRange = \case+  ExprHole _ a -> nameRange a+  ExprSection _ a -> (a, a)+  ExprIdent _ a -> qualRange a+  ExprConstructor _ a -> qualRange a+  ExprBoolean _ a _ -> (a, a)+  ExprChar _ a _ -> (a, a)+  ExprString _ a _ -> (a, a)+  ExprNumber _ a _ -> (a, a)+  ExprArray _ a -> wrappedRange a+  ExprRecord _ a -> wrappedRange a+  ExprParens _ a -> wrappedRange a+  ExprTyped _ a _ b -> (fst $ exprRange a, snd $ typeRange b)+  ExprInfix _ a _ b -> (fst $ exprRange a, snd $ exprRange b)+  ExprOp _ a _ b -> (fst $ exprRange a, snd $ exprRange b)+  ExprOpName _ a -> qualRange a+  ExprNegate _ a b -> (a, snd $ exprRange b)+  ExprRecordAccessor _ (RecordAccessor a _ b) -> (fst $ exprRange a, lblTok $ sepLast b)+  ExprRecordUpdate _ a b -> (fst $ exprRange a, snd $ wrappedRange b)+  ExprApp _ a b -> (fst $ exprRange a, snd $ exprRange b)+  ExprLambda _ (Lambda a _ _ b) -> (a, snd $ exprRange b)+  ExprIf _ (IfThenElse a _ _ _ _ b) -> (a, snd $ exprRange b)+  ExprCase _ (CaseOf a _ _ c) -> (a, snd . guardedRange . snd $ NE.last c)+  ExprLet _ (LetIn a _ _ b) -> (a, snd $ exprRange b)+  ExprDo _ (DoBlock a b) -> (a,  snd . doStatementRange $ NE.last b)+  ExprAdo _ (AdoBlock a _ _ b) -> (a, snd $ exprRange b)++letBindingRange :: LetBinding a -> TokenRange+letBindingRange = \case+  LetBindingSignature _ (Labeled a _ b) -> (nameTok a, snd $ typeRange b)+  LetBindingName _ a -> valueBindingFieldsRange a+  LetBindingPattern _ a _ b -> (fst $ binderRange a, snd $ whereRange b)++doStatementRange :: DoStatement a -> TokenRange+doStatementRange = \case+  DoLet a bs -> (a, snd . letBindingRange $ NE.last bs)+  DoDiscard a -> exprRange a+  DoBind a _ b -> (fst $ binderRange a, snd $ exprRange b)++binderRange :: Binder a -> TokenRange+binderRange = \case+  BinderWildcard _ a -> (a, a)+  BinderVar _ a -> nameRange a+  BinderNamed _ a _ b -> (nameTok a, snd $ binderRange b)+  BinderConstructor _ a bs+    | [] <- bs -> qualRange a+    | otherwise -> (qualTok a, snd . binderRange $ last bs)+  BinderBoolean _ a _ -> (a, a)+  BinderChar _ a _ -> (a, a)+  BinderString _ a _ -> (a, a)+  BinderNumber _ a b _+    | Just a' <- a -> (a', b)+    | otherwise -> (b, b)+  BinderArray _ a -> wrappedRange a+  BinderRecord _ a -> wrappedRange a+  BinderParens _ a -> wrappedRange a+  BinderTyped _ a _ b -> (fst $ binderRange a, snd $ typeRange b)+  BinderOp _ a _ b -> (fst $ binderRange a, snd $ binderRange b)++recordUpdateRange :: RecordUpdate a -> TokenRange+recordUpdateRange = \case+  RecordUpdateLeaf a _ b -> (lblTok a, snd $ exprRange b)+  RecordUpdateBranch a (Wrapped _ _ b) -> (lblTok a, b)
+ src/Language/PureScript/CST/Print.hs view
@@ -0,0 +1,96 @@+-- | This is just a simple token printer. It's not a full fledged formatter, but+-- it is used by the layout golden tests. Printing each token in the tree with+-- this printer will result in the exact input that was given to the lexer.++module Language.PureScript.CST.Print+  ( printToken+  , printTokens+  , printModule+  , printLeadingComment+  , printTrailingComment+  ) where++import Prelude++import qualified Data.DList as DList+import Data.Text (Text)+import qualified Data.Text as Text+import Language.PureScript.CST.Types+import Language.PureScript.CST.Flatten (flattenModule)++printToken :: Token -> Text+printToken = printToken' True++-- | Prints a given Token. The bool controls whether or not layout+-- tokens should be printed.+printToken' :: Bool -> Token -> Text+printToken' showLayout = \case+  TokLeftParen             -> "("+  TokRightParen            -> ")"+  TokLeftBrace             -> "{"+  TokRightBrace            -> "}"+  TokLeftSquare            -> "["+  TokRightSquare           -> "]"+  TokLeftArrow ASCII       -> "<-"+  TokLeftArrow Unicode     -> "←"+  TokRightArrow ASCII      -> "->"+  TokRightArrow Unicode    -> "→"+  TokRightFatArrow ASCII   -> "=>"+  TokRightFatArrow Unicode -> "⇒"+  TokDoubleColon ASCII     -> "::"+  TokDoubleColon Unicode   -> "∷"+  TokForall ASCII          -> "forall"+  TokForall Unicode        -> "∀"+  TokEquals                -> "="+  TokPipe                  -> "|"+  TokTick                  -> "`"+  TokDot                   -> "."+  TokComma                 -> ","+  TokUnderscore            -> "_"+  TokBackslash             -> "\\"+  TokLowerName qual name   -> printQual qual <> name+  TokUpperName qual name   -> printQual qual <> name+  TokOperator qual sym     -> printQual qual <> sym+  TokSymbolName qual sym   -> printQual qual <> "(" <> sym <> ")"+  TokSymbolArr Unicode     -> "(→)"+  TokSymbolArr ASCII       -> "(->)"+  TokHole hole             -> "?" <> hole+  TokChar raw _            -> "'" <> raw <> "'"+  TokString raw _          -> "\"" <> raw <> "\""+  TokRawString raw         -> "\"\"\"" <> raw <> "\"\"\""+  TokInt raw _             -> raw+  TokNumber raw _          -> raw+  TokLayoutStart           -> if showLayout then "{" else ""+  TokLayoutSep             -> if showLayout then ";" else ""+  TokLayoutEnd             -> if showLayout then "}" else ""+  TokEof                   -> if showLayout then "<eof>" else ""++printQual :: [Text] -> Text+printQual = Text.concat . map (<> ".")++printTokens :: [SourceToken] -> Text+printTokens = printTokens' True++printTokens' :: Bool -> [SourceToken] -> Text+printTokens' showLayout toks = Text.concat (map pp toks)+  where+  pp (SourceToken (TokenAnn _ leading trailing) tok) =+    Text.concat (map printLeadingComment leading)+      <> printToken' showLayout tok+      <> Text.concat (map printTrailingComment trailing)++printModule :: Module a -> Text+printModule = printTokens' False . DList.toList . flattenModule++printLeadingComment :: Comment LineFeed -> Text+printLeadingComment = \case+  Comment raw -> raw+  Space n -> Text.replicate n " "+  Line LF -> "\n"+  Line CRLF -> "\r\n"++printTrailingComment :: Comment void -> Text+printTrailingComment = \case+  Comment raw -> raw+  Space n -> Text.replicate n " "+  Line _ -> ""
+ src/Language/PureScript/CST/Traversals.hs view
@@ -0,0 +1,11 @@+module Language.PureScript.CST.Traversals where++import Prelude++import Language.PureScript.CST.Types++everythingOnSeparated :: (r -> r -> r) -> (a -> r) -> Separated a -> r+everythingOnSeparated op k (Separated hd tl) = go hd tl+  where+  go a [] = k a+  go a (b : bs) = k a `op` go (snd b) bs
+ src/Language/PureScript/CST/Traversals/Type.hs view
@@ -0,0 +1,41 @@+module Language.PureScript.CST.Traversals.Type where++import Prelude++import Language.PureScript.CST.Types+import Language.PureScript.CST.Traversals++everythingOnTypes :: (r -> r -> r) -> (Type a -> r) -> Type a -> r+everythingOnTypes op k = goTy+  where+  goTy ty = case ty of+    TypeVar _ _ -> k ty+    TypeConstructor _ _ -> k ty+    TypeWildcard _ _ -> k ty+    TypeHole _ _ -> k ty+    TypeString _ _ _ -> k ty+    TypeInt _ _ _ _ -> k ty+    TypeRow _ (Wrapped _ row _) -> goRow ty row+    TypeRecord _ (Wrapped _ row _) -> goRow ty row+    TypeForall _ _ _ _ ty2 -> k ty `op` goTy ty2+    TypeKinded _ ty2 _ ty3 -> k ty `op` (goTy ty2 `op` goTy ty3)+    TypeApp _ ty2 ty3 -> k ty `op` (goTy ty2 `op` goTy ty3)+    TypeOp _ ty2 _ ty3 -> k ty `op` (goTy ty2 `op` goTy ty3)+    TypeOpName _ _ -> k ty+    TypeArr _ ty2 _ ty3 -> k ty `op` (goTy ty2 `op` goTy ty3)+    TypeArrName _ _ -> k ty+    TypeConstrained _ (constraintTys -> ty2) _ ty3+      | null ty2 -> k ty `op` goTy ty3+      | otherwise -> k ty `op` (foldr1 op (k <$> ty2) `op` goTy ty3)+    TypeParens _ (Wrapped _ ty2 _) -> k ty `op` goTy ty2+    TypeUnaryRow _ _ ty2 -> k ty `op` goTy ty2++  goRow ty = \case+    Row Nothing Nothing -> k ty+    Row Nothing (Just (_, ty2)) -> k ty `op` goTy ty2+    Row (Just lbls) Nothing -> k ty `op` everythingOnSeparated op (goTy . lblValue) lbls+    Row (Just lbls) (Just (_, ty2)) -> k ty `op` (everythingOnSeparated op (goTy . lblValue) lbls `op` goTy ty2)++  constraintTys = \case+    Constraint _ _ tys -> tys+    ConstraintParens _ (Wrapped _ c _) -> constraintTys c
+ src/Language/PureScript/CST/Types.hs view
@@ -0,0 +1,437 @@+-- | This module contains data types for the entire PureScript surface language. Every+-- token is represented in the tree, and every token is annotated with+-- whitespace and comments (both leading and trailing). This means one can write+-- an exact printer so that `print . parse = id`. Every constructor is laid out+-- with tokens in left-to-right order. The core productions are given a slot for+-- arbitrary annotations, however this is not used by the parser.++module Language.PureScript.CST.Types where++import Prelude++import Data.List.NonEmpty (NonEmpty)+import Data.Text (Text)+import Data.Void (Void)+import GHC.Generics (Generic)+import qualified Language.PureScript.Names as N+import qualified Language.PureScript.Roles as R+import Language.PureScript.PSString (PSString)++data SourcePos = SourcePos+  { srcLine :: {-# UNPACK #-} !Int+  , srcColumn :: {-# UNPACK #-} !Int+  } deriving (Show, Eq, Ord, Generic)++data SourceRange = SourceRange+  { srcStart :: !SourcePos+  , srcEnd :: !SourcePos+  } deriving (Show, Eq, Ord, Generic)++data Comment l+  = Comment !Text+  | Space {-# UNPACK #-} !Int+  | Line !l+  deriving (Show, Eq, Ord, Generic, Functor)++data LineFeed = LF | CRLF+  deriving (Show, Eq, Ord, Generic)++data TokenAnn = TokenAnn+  { tokRange :: !SourceRange+  , tokLeadingComments :: ![Comment LineFeed]+  , tokTrailingComments :: ![Comment Void]+  } deriving (Show, Eq, Ord, Generic)++data SourceStyle = ASCII | Unicode+  deriving (Show, Eq, Ord, Generic)++data Token+  = TokLeftParen+  | TokRightParen+  | TokLeftBrace+  | TokRightBrace+  | TokLeftSquare+  | TokRightSquare+  | TokLeftArrow !SourceStyle+  | TokRightArrow !SourceStyle+  | TokRightFatArrow !SourceStyle+  | TokDoubleColon !SourceStyle+  | TokForall !SourceStyle+  | TokEquals+  | TokPipe+  | TokTick+  | TokDot+  | TokComma+  | TokUnderscore+  | TokBackslash+  | TokLowerName ![Text] !Text+  | TokUpperName ![Text] !Text+  | TokOperator ![Text] !Text+  | TokSymbolName ![Text] !Text+  | TokSymbolArr !SourceStyle+  | TokHole !Text+  | TokChar !Text !Char+  | TokString !Text !PSString+  | TokRawString !Text+  | TokInt !Text !Integer+  | TokNumber !Text !Double+  | TokLayoutStart+  | TokLayoutSep+  | TokLayoutEnd+  | TokEof+  deriving (Show, Eq, Ord, Generic)++data SourceToken = SourceToken+  { tokAnn :: !TokenAnn+  , tokValue :: !Token+  } deriving (Show, Eq, Ord, Generic)++data Ident = Ident+  { getIdent :: Text+  } deriving (Show, Eq, Ord, Generic)++data Name a = Name+  { nameTok :: SourceToken+  , nameValue :: a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data QualifiedName a = QualifiedName+  { qualTok :: SourceToken+  , qualModule :: Maybe N.ModuleName+  , qualName :: a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Label = Label+  { lblTok :: SourceToken+  , lblName :: PSString+  } deriving (Show, Eq, Ord, Generic)++data Wrapped a = Wrapped+  { wrpOpen :: SourceToken+  , wrpValue :: a+  , wrpClose :: SourceToken+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Separated a = Separated+  { sepHead :: a+  , sepTail :: [(SourceToken, a)]+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Labeled a b = Labeled+  { lblLabel :: a+  , lblSep :: SourceToken+  , lblValue  :: b+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++type Delimited a = Wrapped (Maybe (Separated a))+type DelimitedNonEmpty a = Wrapped (Separated a)++data OneOrDelimited a+  = One a+  | Many (DelimitedNonEmpty a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Type a+  = TypeVar a (Name Ident)+  | TypeConstructor a (QualifiedName (N.ProperName 'N.TypeName))+  | TypeWildcard a SourceToken+  | TypeHole a (Name Ident)+  | TypeString a SourceToken PSString+  | TypeInt a (Maybe SourceToken) SourceToken Integer+  | TypeRow a (Wrapped (Row a))+  | TypeRecord a (Wrapped (Row a))+  | TypeForall a SourceToken (NonEmpty (TypeVarBinding a)) SourceToken (Type a)+  | TypeKinded a (Type a) SourceToken (Type a)+  | TypeApp a (Type a) (Type a)+  | TypeOp a (Type a) (QualifiedName (N.OpName 'N.TypeOpName)) (Type a)+  | TypeOpName a (QualifiedName (N.OpName 'N.TypeOpName))+  | TypeArr a (Type a) SourceToken (Type a)+  | TypeArrName a SourceToken+  | TypeConstrained a (Constraint a) SourceToken (Type a)+  | TypeParens a (Wrapped (Type a))+  | TypeUnaryRow a SourceToken (Type a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data TypeVarBinding a+  = TypeVarKinded (Wrapped (Labeled (Name Ident) (Type a)))+  | TypeVarName (Name Ident)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Constraint a+  = Constraint a (QualifiedName (N.ProperName 'N.ClassName)) [Type a]+  | ConstraintParens a (Wrapped (Constraint a))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Row a = Row+  { rowLabels :: Maybe (Separated (Labeled Label (Type a)))+  , rowTail :: Maybe (SourceToken, Type a)+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Module a = Module+  { modAnn :: a+  , modKeyword :: SourceToken+  , modNamespace :: Name N.ModuleName+  , modExports :: Maybe (DelimitedNonEmpty (Export a))+  , modWhere :: SourceToken+  , modImports :: [ImportDecl a]+  , modDecls :: [Declaration a]+  , modTrailingComments :: [Comment LineFeed]+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Export a+  = ExportValue a (Name Ident)+  | ExportOp a (Name (N.OpName 'N.ValueOpName))+  | ExportType a (Name (N.ProperName 'N.TypeName)) (Maybe (DataMembers a))+  | ExportTypeOp a SourceToken (Name (N.OpName 'N.TypeOpName))+  | ExportClass a SourceToken (Name (N.ProperName 'N.ClassName))+  | ExportModule a SourceToken (Name N.ModuleName)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data DataMembers a+  = DataAll a SourceToken+  | DataEnumerated a (Delimited (Name (N.ProperName 'N.ConstructorName)))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Declaration a+  = DeclData a (DataHead a) (Maybe (SourceToken, Separated (DataCtor a)))+  | DeclType a (DataHead a) SourceToken (Type a)+  | DeclNewtype a (DataHead a) SourceToken (Name (N.ProperName 'N.ConstructorName)) (Type a)+  | DeclClass a (ClassHead a) (Maybe (SourceToken, NonEmpty (Labeled (Name Ident) (Type a))))+  | DeclInstanceChain a (Separated (Instance a))+  | DeclDerive a SourceToken (Maybe SourceToken) (InstanceHead a)+  | DeclKindSignature a SourceToken (Labeled (Name (N.ProperName 'N.TypeName)) (Type a))+  | DeclSignature a (Labeled (Name Ident) (Type a))+  | DeclValue a (ValueBindingFields a)+  | DeclFixity a FixityFields+  | DeclForeign a SourceToken SourceToken (Foreign a)+  | DeclRole a SourceToken SourceToken (Name (N.ProperName 'N.TypeName)) (NonEmpty Role)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Instance a = Instance+  { instHead :: InstanceHead a+  , instBody :: Maybe (SourceToken, NonEmpty (InstanceBinding a))+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data InstanceBinding a+  = InstanceBindingSignature a (Labeled (Name Ident) (Type a))+  | InstanceBindingName a (ValueBindingFields a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data ImportDecl a = ImportDecl+  { impAnn :: a+  , impKeyword :: SourceToken+  , impModule :: Name N.ModuleName+  , impNames :: Maybe (Maybe SourceToken, DelimitedNonEmpty (Import a))+  , impQual :: Maybe (SourceToken, Name N.ModuleName)+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Import a+  = ImportValue a (Name Ident)+  | ImportOp a (Name (N.OpName 'N.ValueOpName))+  | ImportType a (Name (N.ProperName 'N.TypeName)) (Maybe (DataMembers a))+  | ImportTypeOp a SourceToken (Name (N.OpName 'N.TypeOpName))+  | ImportClass a SourceToken (Name (N.ProperName 'N.ClassName))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data DataHead a = DataHead+  { dataHdKeyword :: SourceToken+  , dataHdName :: Name (N.ProperName 'N.TypeName)+  , dataHdVars :: [TypeVarBinding a]+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data DataCtor a = DataCtor+  { dataCtorAnn :: a+  , dataCtorName :: Name (N.ProperName 'N.ConstructorName)+  , dataCtorFields :: [Type a]+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data ClassHead a = ClassHead+  { clsKeyword :: SourceToken+  , clsSuper :: Maybe (OneOrDelimited (Constraint a), SourceToken)+  , clsName :: Name (N.ProperName 'N.ClassName)+  , clsVars :: [TypeVarBinding a]+  , clsFundeps :: Maybe (SourceToken, Separated ClassFundep)+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data ClassFundep+  = FundepDetermined SourceToken (NonEmpty (Name Ident))+  | FundepDetermines (NonEmpty (Name Ident)) SourceToken (NonEmpty (Name Ident))+  deriving (Show, Eq, Ord, Generic)++data InstanceHead a = InstanceHead+  { instKeyword :: SourceToken+  , instNameSep :: Maybe (Name Ident, SourceToken)+  , instConstraints :: Maybe (OneOrDelimited (Constraint a), SourceToken)+  , instClass :: QualifiedName (N.ProperName 'N.ClassName)+  , instTypes :: [Type a]+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Fixity+  = Infix+  | Infixl+  | Infixr+  deriving (Show, Eq, Ord, Generic)++data FixityOp+  = FixityValue (QualifiedName (Either Ident (N.ProperName 'N.ConstructorName))) SourceToken (Name (N.OpName 'N.ValueOpName))+  | FixityType SourceToken (QualifiedName (N.ProperName 'N.TypeName)) SourceToken (Name (N.OpName 'N.TypeOpName))+  deriving (Show, Eq, Ord, Generic)++data FixityFields = FixityFields+  { fxtKeyword :: (SourceToken, Fixity)+  , fxtPrec :: (SourceToken, Integer)+  , fxtOp :: FixityOp+  } deriving (Show, Eq, Ord, Generic)++data ValueBindingFields a = ValueBindingFields+  { valName :: Name Ident+  , valBinders :: [Binder a]+  , valGuarded :: Guarded a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Guarded a+  = Unconditional SourceToken (Where a)+  | Guarded (NonEmpty (GuardedExpr a))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data GuardedExpr a = GuardedExpr+  { grdBar :: SourceToken+  , grdPatterns :: Separated (PatternGuard a)+  , grdSep :: SourceToken+  , grdWhere :: Where a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data PatternGuard a = PatternGuard+  { patBinder :: Maybe (Binder a, SourceToken)+  , patExpr :: Expr a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Foreign a+  = ForeignValue (Labeled (Name Ident) (Type a))+  | ForeignData SourceToken (Labeled (Name (N.ProperName 'N.TypeName)) (Type a))+  | ForeignKind SourceToken (Name (N.ProperName 'N.TypeName))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Role = Role+  { roleTok :: SourceToken+  , roleValue :: R.Role+  } deriving (Show, Eq, Ord, Generic)++data Expr a+  = ExprHole a (Name Ident)+  | ExprSection a SourceToken+  | ExprIdent a (QualifiedName Ident)+  | ExprConstructor a (QualifiedName (N.ProperName 'N.ConstructorName))+  | ExprBoolean a SourceToken Bool+  | ExprChar a SourceToken Char+  | ExprString a SourceToken PSString+  | ExprNumber a SourceToken (Either Integer Double)+  | ExprArray a (Delimited (Expr a))+  | ExprRecord a (Delimited (RecordLabeled (Expr a)))+  | ExprParens a (Wrapped (Expr a))+  | ExprTyped a (Expr a) SourceToken (Type a)+  | ExprInfix a (Expr a) (Wrapped (Expr a)) (Expr a)+  | ExprOp a (Expr a) (QualifiedName (N.OpName 'N.ValueOpName)) (Expr a)+  | ExprOpName a (QualifiedName (N.OpName 'N.ValueOpName))+  | ExprNegate a SourceToken (Expr a)+  | ExprRecordAccessor a (RecordAccessor a)+  | ExprRecordUpdate a (Expr a) (DelimitedNonEmpty (RecordUpdate a))+  | ExprApp a (Expr a) (Expr a)+  | ExprLambda a (Lambda a)+  | ExprIf a (IfThenElse a)+  | ExprCase a (CaseOf a)+  | ExprLet a (LetIn a)+  | ExprDo a (DoBlock a)+  | ExprAdo a (AdoBlock a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data RecordLabeled a+  = RecordPun (Name Ident)+  | RecordField Label SourceToken a+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data RecordUpdate a+  = RecordUpdateLeaf Label SourceToken (Expr a)+  | RecordUpdateBranch Label (DelimitedNonEmpty (RecordUpdate a))+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data RecordAccessor a = RecordAccessor+  { recExpr :: Expr a+  , recDot :: SourceToken+  , recPath :: Separated Label+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Lambda a = Lambda+  { lmbSymbol :: SourceToken+  , lmbBinders :: NonEmpty (Binder a)+  , lmbArr :: SourceToken+  , lmbBody :: Expr a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data IfThenElse a = IfThenElse+  { iteIf :: SourceToken+  , iteCond :: Expr a+  , iteThen :: SourceToken+  , iteTrue :: Expr a+  , iteElse :: SourceToken+  , iteFalse :: Expr a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data CaseOf a = CaseOf+  { caseKeyword :: SourceToken+  , caseHead :: Separated (Expr a)+  , caseOf :: SourceToken+  , caseBranches :: NonEmpty (Separated (Binder a), Guarded a)+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data LetIn a = LetIn+  { letKeyword :: SourceToken+  , letBindings :: NonEmpty (LetBinding a)+  , letIn :: SourceToken+  , letBody :: Expr a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Where a = Where+  { whereExpr :: Expr a+  , whereBindings :: Maybe (SourceToken, NonEmpty (LetBinding a))+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data LetBinding a+  = LetBindingSignature a (Labeled (Name Ident) (Type a))+  | LetBindingName a (ValueBindingFields a)+  | LetBindingPattern a (Binder a) SourceToken (Where a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data DoBlock a = DoBlock+  { doKeyword :: SourceToken+  , doStatements :: NonEmpty (DoStatement a)+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data DoStatement a+  = DoLet SourceToken (NonEmpty (LetBinding a))+  | DoDiscard (Expr a)+  | DoBind (Binder a) SourceToken (Expr a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data AdoBlock a = AdoBlock+  { adoKeyword :: SourceToken+  , adoStatements :: [DoStatement a]+  , adoIn :: SourceToken+  , adoResult :: Expr a+  } deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++data Binder a+  = BinderWildcard a SourceToken+  | BinderVar a (Name Ident)+  | BinderNamed a (Name Ident) SourceToken (Binder a)+  | BinderConstructor a (QualifiedName (N.ProperName 'N.ConstructorName)) [Binder a]+  | BinderBoolean a SourceToken Bool+  | BinderChar a SourceToken Char+  | BinderString a SourceToken PSString+  | BinderNumber a (Maybe SourceToken) SourceToken (Either Integer Double)+  | BinderArray a (Delimited (Binder a))+  | BinderRecord a (Delimited (RecordLabeled (Binder a)))+  | BinderParens a (Wrapped (Binder a))+  | BinderTyped a (Binder a) SourceToken (Type a)+  | BinderOp a (Binder a) (QualifiedName (N.OpName 'N.ValueOpName)) (Binder a)+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)
+ src/Language/PureScript/CST/Utils.hs view
@@ -0,0 +1,352 @@+module Language.PureScript.CST.Utils where++import Prelude++import Control.Monad (unless)+import Data.Coerce (coerce)+import Data.Foldable (for_)+import Data.Functor (($>))+import qualified Data.List.NonEmpty as NE+import Data.Set (Set)+import qualified Data.Set as Set+import Data.Text (Text)+import qualified Data.Text as Text+import Language.PureScript.CST.Errors+import Language.PureScript.CST.Monad+import Language.PureScript.CST.Positions+import Language.PureScript.CST.Traversals.Type+import Language.PureScript.CST.Types+import qualified Language.PureScript.Names as N+import Language.PureScript.PSString (PSString, mkString)++-- |+-- A newtype for a qualified proper name whose ProperNameType has not yet been determined.+-- This is a workaround for Happy's limited support for polymorphism; it is used+-- inside the parser to allow us to write just one parser for qualified proper names+-- which can be used for all of the different ProperNameTypes+-- (via a call to getQualifiedProperName).+newtype QualifiedProperName =+  QualifiedProperName { getQualifiedProperName :: forall a. QualifiedName (N.ProperName a) }++qualifiedProperName :: QualifiedName (N.ProperName a) -> QualifiedProperName+qualifiedProperName n = QualifiedProperName (N.coerceProperName <$> n)++-- |+-- A newtype for a proper name whose ProperNameType has not yet been determined.+-- This is a workaround for Happy's limited support for polymorphism; it is used+-- inside the parser to allow us to write just one parser for proper names+-- which can be used for all of the different ProperNameTypes+-- (via a call to getProperName).+newtype ProperName =+  ProperName { getProperName :: forall a. Name (N.ProperName a) }++properName :: Name (N.ProperName a) -> ProperName+properName n = ProperName (N.coerceProperName <$> n)++-- |+-- A newtype for a qualified operator name whose OpNameType has not yet been determined.+-- This is a workaround for Happy's limited support for polymorphism; it is used+-- inside the parser to allow us to write just one parser for qualified operator names+-- which can be used for all of the different OpNameTypes+-- (via a call to getQualifiedOpName).+newtype QualifiedOpName =+  QualifiedOpName { getQualifiedOpName :: forall a. QualifiedName (N.OpName a) }++qualifiedOpName :: QualifiedName (N.OpName a) -> QualifiedOpName+qualifiedOpName n = QualifiedOpName (N.coerceOpName <$> n)++-- |+-- A newtype for a operator name whose OpNameType has not yet been determined.+-- This is a workaround for Happy's limited support for polymorphism; it is used+-- inside the parser to allow us to write just one parser for operator names+-- which can be used for all of the different OpNameTypes+-- (via a call to getOpName).+newtype OpName =+  OpName { getOpName :: forall a. Name (N.OpName a) }++opName :: Name (N.OpName a) -> OpName+opName n = OpName (N.coerceOpName <$> n)++placeholder :: SourceToken+placeholder = SourceToken+  { tokAnn = TokenAnn (SourceRange (SourcePos 0 0) (SourcePos 0 0)) [] []+  , tokValue = TokLowerName [] "<placeholder>"+  }++unexpectedName :: SourceToken -> Name Ident+unexpectedName tok = Name tok (Ident "<unexpected>")++unexpectedQual :: SourceToken -> QualifiedName Ident+unexpectedQual tok = QualifiedName tok Nothing (Ident "<unexpected>")++unexpectedLabel :: SourceToken -> Label+unexpectedLabel tok = Label tok "<unexpected>"++unexpectedExpr :: Monoid a => [SourceToken] -> Expr a+unexpectedExpr toks = ExprIdent mempty (unexpectedQual (head toks))++unexpectedBinder :: Monoid a => [SourceToken] -> Binder a+unexpectedBinder toks = BinderVar mempty (unexpectedName (head toks))++unexpectedRecordUpdate :: Monoid a => [SourceToken] -> RecordUpdate a+unexpectedRecordUpdate toks = RecordUpdateLeaf (unexpectedLabel (head toks)) (head toks) (unexpectedExpr toks)++unexpectedRecordLabeled :: [SourceToken] -> RecordLabeled a+unexpectedRecordLabeled toks = RecordPun (unexpectedName (head toks))++rangeToks :: TokenRange -> [SourceToken]+rangeToks (a, b) = [a, b]++unexpectedToks :: (a -> TokenRange) -> ([SourceToken] -> b) -> ParserErrorType -> (a -> Parser b)+unexpectedToks toRange toCst err old = do+  let toks = rangeToks $ toRange old+  addFailure toks err+  pure $ toCst toks++separated :: [(SourceToken, a)] -> Separated a+separated = go []+  where+  go accum [(_, a)] = Separated a accum+  go accum (x : xs) = go (x : accum) xs+  go _ [] = internalError "Separated should not be empty"++internalError :: String -> a+internalError = error . ("Internal parser error: " <>)++toModuleName :: SourceToken -> [Text] -> Parser (Maybe N.ModuleName)+toModuleName _ [] = pure Nothing+toModuleName tok ns = do+  unless (all isValidModuleNamespace ns) $ addFailure [tok] ErrModuleName+  pure . Just . N.ModuleName $ Text.intercalate "." ns++upperToModuleName :: SourceToken -> Parser (Name N.ModuleName)+upperToModuleName tok = case tokValue tok of+  TokUpperName q a -> do+    let ns = q <> [a]+    unless (all isValidModuleNamespace ns) $ addFailure [tok] ErrModuleName+    pure . Name tok . N.ModuleName $ Text.intercalate "." ns+  _ -> internalError $ "Invalid upper name: " <> show tok++toQualifiedName :: (Text -> a) -> SourceToken -> Parser (QualifiedName a)+toQualifiedName k tok = case tokValue tok of+  TokLowerName q a+    | not (Set.member a reservedNames) -> flip (QualifiedName tok) (k a) <$> toModuleName tok q+    | otherwise -> addFailure [tok] ErrKeywordVar $> QualifiedName tok Nothing (k "<unexpected>")+  TokUpperName q a  -> flip (QualifiedName tok) (k a) <$> toModuleName tok q+  TokSymbolName q a -> flip (QualifiedName tok) (k a) <$> toModuleName tok q+  TokOperator q a   -> flip (QualifiedName tok) (k a) <$> toModuleName tok q+  _                 -> internalError $ "Invalid qualified name: " <> show tok++toName :: (Text -> a) -> SourceToken -> Parser (Name a)+toName k tok = case tokValue tok of+  TokLowerName [] a+    | not (Set.member a reservedNames) -> pure $ Name tok (k a)+    | otherwise -> addFailure [tok] ErrKeywordVar $> Name tok (k "<unexpected>")+  TokString _ _ -> parseFail tok ErrQuotedPun+  TokRawString _ -> parseFail tok ErrQuotedPun+  TokUpperName [] a  -> pure $ Name tok (k a)+  TokSymbolName [] a -> pure $ Name tok (k a)+  TokOperator [] a   -> pure $ Name tok (k a)+  TokHole a          -> pure $ Name tok (k a)+  _                  -> internalError $ "Invalid name: " <> show tok++toLabel :: SourceToken -> Label+toLabel tok = case tokValue tok of+  TokLowerName [] a -> Label tok $ mkString a+  TokString _ a     -> Label tok a+  TokRawString a    -> Label tok $ mkString a+  TokForall ASCII   -> Label tok $ mkString "forall"+  _                 -> internalError $ "Invalid label: " <> show tok++toString :: SourceToken -> (SourceToken, PSString)+toString tok = case tokValue tok of+  TokString _ a  -> (tok, a)+  TokRawString a -> (tok, mkString a)+  _              -> internalError $ "Invalid string literal: " <> show tok++toChar :: SourceToken -> (SourceToken, Char)+toChar tok = case tokValue tok of+  TokChar _ a -> (tok, a)+  _           -> internalError $ "Invalid char literal: " <> show tok++toNumber :: SourceToken -> (SourceToken, Either Integer Double)+toNumber tok = case tokValue tok of+  TokInt _ a    -> (tok, Left a)+  TokNumber _ a -> (tok, Right a)+  _             -> internalError $ "Invalid number literal: " <> show tok++toInt :: SourceToken -> (SourceToken, Integer)+toInt tok = case tokValue tok of+  TokInt _ a    -> (tok, a)+  _             -> internalError $ "Invalid integer literal: " <> show tok++toBoolean :: SourceToken -> (SourceToken, Bool)+toBoolean tok = case tokValue tok of+  TokLowerName [] "true"  -> (tok, True)+  TokLowerName [] "false" -> (tok, False)+  _                       -> internalError $ "Invalid boolean literal: " <> show tok++toConstraint :: forall a. Monoid a => Type a -> Parser (Constraint a)+toConstraint = convertParens+  where+  convertParens :: Type a -> Parser (Constraint a)+  convertParens = \case+    TypeParens a (Wrapped b c d) -> do+      c' <- convertParens c+      pure $ ConstraintParens a (Wrapped b c' d)+    ty -> convert mempty [] ty++  convert :: a -> [Type a] -> Type a -> Parser (Constraint a)+  convert ann acc = \case+    TypeApp a lhs rhs -> convert (a <> ann) (rhs : acc) lhs+    TypeConstructor a name -> do+      for_ acc checkNoForalls+      pure $ Constraint (a <> ann) (coerce name) acc+    ty -> do+      let (tok1, tok2) = typeRange ty+      addFailure [tok1, tok2] ErrTypeInConstraint+      pure $ Constraint mempty (QualifiedName tok1 Nothing (N.ProperName "<unexpected")) []++isConstrained :: Type a -> Bool+isConstrained = everythingOnTypes (||) $ \case+  TypeConstrained{} -> True+  _ -> False++toBinderConstructor :: Monoid a => NE.NonEmpty (Binder a) -> Parser (Binder a)+toBinderConstructor = \case+  BinderConstructor a name [] NE.:| bs ->+    pure $ BinderConstructor a name bs+  a NE.:| [] -> pure a+  a NE.:| _ -> unexpectedToks binderRange unexpectedBinder ErrExprInBinder a++toRecordFields+  :: Monoid a+  => Separated (Either (RecordLabeled (Expr a)) (RecordUpdate a))+  -> Parser (Either (Separated (RecordLabeled (Expr a))) (Separated (RecordUpdate a)))+toRecordFields = \case+  Separated (Left a) as ->+    Left . Separated a <$> traverse (traverse unLeft) as+  Separated (Right a) as ->+    Right . Separated a <$> traverse (traverse unRight) as+  where+  unLeft (Left tok) = pure tok+  unLeft (Right tok) =+    unexpectedToks recordUpdateRange unexpectedRecordLabeled ErrRecordUpdateInCtr tok++  unRight (Right tok) = pure tok+  unRight (Left (RecordPun (Name tok _))) = do+    addFailure [tok] ErrRecordPunInUpdate+    pure $ unexpectedRecordUpdate [tok]+  unRight (Left (RecordField _ tok _)) = do+    addFailure [tok] ErrRecordCtrInUpdate+    pure $ unexpectedRecordUpdate [tok]++checkFundeps :: ClassHead a -> Parser ()+checkFundeps (ClassHead _ _ _ _ Nothing) = pure ()+checkFundeps (ClassHead _ _ _ vars (Just (_, fundeps))) = do+  let+    k (TypeVarKinded (Wrapped _ (Labeled a _ _) _)) = getIdent $ nameValue a+    k (TypeVarName a) = getIdent $ nameValue a+    names = k <$> vars+    check a+      | getIdent (nameValue a) `elem` names = pure ()+      | otherwise = addFailure [nameTok a] ErrUnknownFundep+  for_ fundeps $ \case+    FundepDetermined _ bs -> for_ bs check+    FundepDetermines as _ bs -> do+      for_ as check+      for_ bs check++data TmpModuleDecl a+  = TmpImport (ImportDecl a)+  | TmpChain (Separated (Declaration a))+  deriving (Show)++toModuleDecls :: Monoid a => [TmpModuleDecl a] -> Parser ([ImportDecl a], [Declaration a])+toModuleDecls = goImport []+  where+  goImport acc (TmpImport x : xs) = goImport (x : acc) xs+  goImport acc xs = (reverse acc,) <$> goDecl [] xs++  goDecl acc [] = pure $ reverse acc+  goDecl acc (TmpChain (Separated x []) : xs) = goDecl (x : acc) xs+  goDecl acc (TmpChain (Separated (DeclInstanceChain a (Separated h t)) t') : xs) = do+    (a', instances) <- goChain (getName h) a [] t'+    goDecl (DeclInstanceChain a' (Separated h (t <> instances)) : acc) xs+  goDecl acc (TmpChain (Separated _ t) : xs) = do+    for_ t $ \(tok, _) -> addFailure [tok] ErrElseInDecl+    goDecl acc xs+  goDecl acc (TmpImport imp : xs) = do+    unexpectedToks importDeclRange (const ()) ErrImportInDecl imp+    goDecl acc xs++  goChain _ ann acc [] = pure (ann, reverse acc)+  goChain name ann acc ((tok, DeclInstanceChain a (Separated h t)) : xs)+    | eqName (getName h) name = goChain name (ann <> a) (reverse ((tok, h) : t) <> acc) xs+    | otherwise = do+        addFailure [qualTok $ getName h] ErrInstanceNameMismatch+        goChain name ann acc xs+  goChain name ann acc ((tok, _) : xs) = do+    addFailure [tok] ErrElseInDecl+    goChain name ann acc xs++  getName = instClass . instHead+  eqName (QualifiedName _ a b) (QualifiedName _ c d) = a == c && b == d++checkNoWildcards :: Type a -> Parser ()+checkNoWildcards ty = do+  let+    k = \case+      TypeWildcard _ a -> [addFailure [a] ErrWildcardInType]+      TypeHole _ a -> [addFailure [nameTok a] ErrHoleInType]+      _ -> []+  sequence_ $ everythingOnTypes (<>) k ty++checkNoForalls :: Type a -> Parser ()+checkNoForalls ty = do+  let+    k = \case+      TypeForall _ a _ _ _ -> [addFailure [a] ErrToken]+      _ -> []+  sequence_ $ everythingOnTypes (<>) k ty++revert :: Parser a -> SourceToken -> Parser a+revert p lk = pushBack lk *> p++reservedNames :: Set Text+reservedNames = Set.fromList+  [ "ado"+  , "case"+  , "class"+  , "data"+  , "derive"+  , "do"+  , "else"+  , "false"+  , "forall"+  , "foreign"+  , "import"+  , "if"+  , "in"+  , "infix"+  , "infixl"+  , "infixr"+  , "instance"+  , "let"+  , "module"+  , "newtype"+  , "of"+  , "true"+  , "type"+  , "where"+  ]++isValidModuleNamespace :: Text -> Bool+isValidModuleNamespace = Text.null . snd . Text.span (\c -> c /= '_' && c /= '\'')++-- | This is to keep the @Parser.y@ file ASCII, otherwise @happy@ will break+-- in non-unicode locales.+--+-- Related GHC issue: https://gitlab.haskell.org/ghc/ghc/issues/8167+isLeftFatArrow :: Text -> Bool+isLeftFatArrow str = str == "<=" || str == "⇐"
src/Language/PureScript/CodeGen/JS.hs view
@@ -9,27 +9,33 @@ import Prelude.Compat import Protolude (ordNub) -import Control.Arrow ((&&&))+import Control.Applicative (liftA2) import Control.Monad (forM, replicateM, void) import Control.Monad.Except (MonadError, throwError) import Control.Monad.Reader (MonadReader, asks) import Control.Monad.Supply.Class+import Control.Monad.Writer (MonadWriter, runWriterT, writer) +import Data.Bifunctor (first) import Data.List ((\\), intersect)+import qualified Data.List.NonEmpty as NEL (nonEmpty) import qualified Data.Foldable as F import qualified Data.Map as M import qualified Data.Set as S-import Data.Maybe (fromMaybe, isNothing)+import Data.Maybe (fromMaybe, mapMaybe, maybeToList)+import Data.Monoid (Any(..)) import Data.String (fromString) import Data.Text (Text) import qualified Data.Text as T  import Language.PureScript.AST.SourcePos import Language.PureScript.CodeGen.JS.Common as Common-import Language.PureScript.CoreImp.AST (AST, everywhereTopDownM, withSourceSpan)+import Language.PureScript.CoreImp.AST (AST, everywhere, everywhereTopDownM, withSourceSpan) import qualified Language.PureScript.CoreImp.AST as AST+import qualified Language.PureScript.CoreImp.Module as AST import Language.PureScript.CoreImp.Optimizer import Language.PureScript.CoreFn+import Language.PureScript.CoreFn.Laziness (applyLazinessTransform) import Language.PureScript.Crash import Language.PureScript.Errors (ErrorMessageHint(..), SimpleErrorMessage(..),                                    MultipleErrors(..), rethrow, errorMessage,@@ -48,57 +54,92 @@   :: forall m    . (Monad m, MonadReader Options m, MonadSupply m, MonadError MultipleErrors m)   => Module Ann-  -> Maybe AST-  -> m [AST]-moduleToJs (Module _ coms mn _ imps exps reExps foreigns decls) foreign_ =+  -> Maybe PSString+  -> m AST.Module+moduleToJs (Module _ coms mn _ imps exps reExps foreigns decls) foreignInclude =   rethrow (addHint (ErrorInModule mn)) $ do     let usedNames = concatMap getNames decls     let mnLookup = renameImports usedNames imps     let decls' = renameModules mnLookup decls-    jsDecls <- mapM bindToJs decls'-    optimized <- traverse (traverse optimize) jsDecls+    (jsDecls, Any needRuntimeLazy) <- runWriterT $ mapM (moduleBindToJs mn) decls'     let mnReverseLookup = M.fromList $ map (\(origName, (_, safeName)) -> (moduleNameToJs safeName, origName)) $ M.toList mnLookup+    let moduleObjectNames = "$foreign" `S.insert` M.keysSet mnReverseLookup+    optimized <- traverse (traverse (fmap (annotatePure moduleObjectNames) . optimize)) (if needRuntimeLazy then [runtimeLazy] : jsDecls else jsDecls)     let usedModuleNames = foldMap (foldMap (findModules mnReverseLookup)) optimized           `S.union` M.keysSet reExps-    jsImports <- traverse (importToJs mnLookup)-      . filter (flip S.member usedModuleNames)-      . (\\ (mn : C.primModules)) $ ordNub $ map snd imps+    let jsImports+          = map (importToJs mnLookup)+          . filter (flip S.member usedModuleNames)+          . (\\ (mn : C.primModules)) $ ordNub $ map snd imps     F.traverse_ (F.traverse_ checkIntegers) optimized     comments <- not <$> asks optionsNoComments-    let strict = AST.StringLiteral Nothing "use strict"-    let header = if comments && not (null coms) then AST.Comment Nothing coms strict else strict-    let foreign' = [AST.VariableIntroduction Nothing "$foreign" foreign_ | not $ null foreigns || isNothing foreign_]-    let moduleBody = header : foreign' ++ jsImports ++ concat optimized+    let header = if comments then coms else []+    let foreign' = maybe [] (pure . AST.Import "$foreign") $ if null foreigns then Nothing else foreignInclude+    let moduleBody = concat optimized     let foreignExps = exps `intersect` foreigns     let standardExps = exps \\ foreignExps     let reExps' = M.toList (M.withoutKeys reExps (S.fromList C.primModules))-    let exps' = AST.ObjectLiteral Nothing $ map (mkString . runIdent &&& AST.Var Nothing . identToJs) standardExps-                               ++ map (mkString . runIdent &&& foreignIdent) foreignExps-                               ++ concatMap (reExportPairs mnLookup) reExps'-    return $ moduleBody ++ [AST.Assignment Nothing (accessorString "exports" (AST.Var Nothing "module")) exps']+    let jsExports+          =  (maybeToList . exportsToJs foreignInclude $ foreignExps)+          ++ (maybeToList . exportsToJs Nothing $ standardExps)+          ++  mapMaybe reExportsToJs reExps'+    return $ AST.Module header (foreign' ++ jsImports) moduleBody jsExports    where+  -- | Adds purity annotations to top-level values for bundlers.+  -- The semantics here derive from treating top-level module evaluation as pure, which lets+  -- us remove any unreferenced top-level declarations. To achieve this, we wrap any non-trivial+  -- top-level values in an IIFE marked with a pure annotation.+  annotatePure :: S.Set Text -> AST -> AST+  annotatePure moduleObjectNames = annotateOrWrap+    where+    annotateOrWrap = liftA2 fromMaybe pureIife maybePure +    -- | If the JS is potentially effectful (in the eyes of a bundler that+    -- doesn't know about PureScript), return Nothing. Otherwise, return Just+    -- the JS with any needed pure annotations added, and, in the case of a+    -- variable declaration, an IIFE to be annotated.+    maybePure :: AST -> Maybe AST+    maybePure = maybePureGen False++    -- | Like maybePure, but doesn't add a pure annotation to App. This exists+    -- to prevent from doubling up on annotation comments on curried+    -- applications; from experimentation, it turns out that a comment on the+    -- outermost App is sufficient for the entire curried chain to be+    -- considered effect-free.+    maybePure' :: AST -> Maybe AST+    maybePure' = maybePureGen True++    maybePureGen alreadyAnnotated = \case+      AST.VariableIntroduction ss name j -> Just (AST.VariableIntroduction ss name (annotateOrWrap <$> j))+      AST.App ss f args -> (if alreadyAnnotated then AST.App else pureApp) ss <$> maybePure' f <*> traverse maybePure args+      -- In general, indexers can be effectful, but not when indexing into an+      -- ES module object.+      AST.Indexer ss idx v@(AST.Var _ name)+        | name `S.member` moduleObjectNames -> (\idx' -> AST.Indexer ss idx' v) <$> maybePure idx+      AST.ArrayLiteral ss jss -> AST.ArrayLiteral ss <$> traverse maybePure jss+      AST.ObjectLiteral ss props -> AST.ObjectLiteral ss <$> traverse (traverse maybePure) props+      AST.Comment c js -> AST.Comment c <$> maybePure js++      js@AST.NumericLiteral{} -> Just js+      js@AST.StringLiteral{}  -> Just js+      js@AST.BooleanLiteral{} -> Just js+      js@AST.Function{}       -> Just js+      js@AST.Var{}            -> Just js++      _ -> Nothing++    pureIife :: AST -> AST+    pureIife val = pureApp Nothing (AST.Function Nothing Nothing [] (AST.Block Nothing [AST.Return Nothing val])) []++    pureApp :: Maybe SourceSpan -> AST -> [AST] -> AST+    pureApp ss f = AST.Comment AST.PureAnnotation . AST.App ss f+   -- | Extracts all declaration names from a binding group.   getNames :: Bind Ann -> [Ident]   getNames (NonRec _ ident _) = [ident]   getNames (Rec vals) = map (snd . fst) vals -  -- | Generate code in the JavaScript IR for re-exported declarations, prepending-  -- the module name from whence it was imported.-  reExportPairs :: M.Map ModuleName (Ann, ModuleName) -> (ModuleName, [Ident]) -> [(PSString, AST)]-  reExportPairs mnLookup (mn', idents) =-    let toExportedMember :: Ident -> AST-        toExportedMember =-          maybe-            (AST.Var Nothing . identToJs)-            (flip accessor . AST.Var Nothing . moduleNameToJs . snd)-            (M.lookup mn' mnLookup)-    in-      map-        (mkString . runIdent &&& toExportedMember)-        idents-   -- | Creates alternative names for each module to ensure they don't collide   -- with declaration names.   renameImports :: [Ident] -> [(Ann, ModuleName)] -> M.Map ModuleName (Ann, ModuleName)@@ -122,13 +163,24 @@    -- | Generates JavaScript code for a module import, binding the required module   -- to the alternative-  importToJs :: M.Map ModuleName (Ann, ModuleName) -> ModuleName -> m AST-  importToJs mnLookup mn' = do-    let ((ss, _, _, _), mnSafe) = fromMaybe (internalError "Missing value in mnLookup") $ M.lookup mn' mnLookup-    let moduleBody = AST.App Nothing (AST.Var Nothing "require")-          [AST.StringLiteral Nothing (fromString (".." </> T.unpack (runModuleName mn') </> "index.js"))]-    withPos ss $ AST.VariableIntroduction Nothing (moduleNameToJs mnSafe) (Just moduleBody)+  importToJs :: M.Map ModuleName (Ann, ModuleName) -> ModuleName -> AST.Import+  importToJs mnLookup mn' =+    let (_, mnSafe) = fromMaybe (internalError "Missing value in mnLookup") $ M.lookup mn' mnLookup+    in AST.Import (moduleNameToJs mnSafe) (moduleImportPath mn') +  -- | Generates JavaScript code for exporting at least one identifier,+  -- eventually from another module.+  exportsToJs :: Maybe PSString -> [Ident] -> Maybe AST.Export+  exportsToJs from = fmap (flip AST.Export from) . NEL.nonEmpty . fmap runIdent++  -- | Generates JavaScript code for re-exporting at least one identifier from+  -- from another module.+  reExportsToJs :: (ModuleName, [Ident]) -> Maybe AST.Export+  reExportsToJs = uncurry exportsToJs . first (Just . moduleImportPath)++  moduleImportPath :: ModuleName -> PSString+  moduleImportPath mn' = fromString (".." </> T.unpack (runModuleName mn') </> "index.js")+   -- | Replaces the `ModuleName`s in the AST so that the generated code refers to   -- the collision-avoiding renamed module imports.   renameModules :: M.Map ModuleName (Ann, ModuleName) -> [Bind Ann] -> [Bind Ann]@@ -157,6 +209,57 @@     go (AST.Var _ name) = foldMap S.singleton $ M.lookup name mnReverseLookup     go _ = mempty +  -- Check that all integers fall within the valid int range for JavaScript.+  checkIntegers :: AST -> m ()+  checkIntegers = void . everywhereTopDownM go+    where+    go :: AST -> m AST+    go (AST.Unary _ AST.Negate (AST.NumericLiteral ss (Left i))) =+      -- Move the negation inside the literal; since this is a top-down+      -- traversal doing this replacement will stop the next case from raising+      -- the error when attempting to use -2147483648, as if left unrewritten+      -- the value is `Unary Negate (NumericLiteral (Left 2147483648))`, and+      -- 2147483648 is larger than the maximum allowed int.+      return $ AST.NumericLiteral ss (Left (-i))+    go js@(AST.NumericLiteral ss (Left i)) =+      let minInt = -2147483648+          maxInt = 2147483647+      in if i < minInt || i > maxInt+         then throwError . maybe errorMessage errorMessage' ss $ IntOutOfRange i "JavaScript" minInt maxInt+         else return js+    go other = return other++  runtimeLazy :: AST+  runtimeLazy =+    AST.VariableIntroduction Nothing "$runtime_lazy" . Just . AST.Function Nothing Nothing ["name", "moduleName", "init"] . AST.Block Nothing $+      [ AST.VariableIntroduction Nothing "state" . Just . AST.NumericLiteral Nothing $ Left 0+      , AST.VariableIntroduction Nothing "val" Nothing+      , AST.Return Nothing . AST.Function Nothing Nothing ["lineNumber"] . AST.Block Nothing $+        [ AST.IfElse Nothing (AST.Binary Nothing AST.EqualTo (AST.Var Nothing "state") (AST.NumericLiteral Nothing (Left 2))) (AST.Return Nothing $ AST.Var Nothing "val") Nothing+        , AST.IfElse Nothing (AST.Binary Nothing AST.EqualTo (AST.Var Nothing "state") (AST.NumericLiteral Nothing (Left 1))) (AST.Throw Nothing $ AST.Unary Nothing AST.New (AST.App Nothing (AST.Var Nothing "ReferenceError") [foldl1 (AST.Binary Nothing AST.Add)+          [ AST.Var Nothing "name"+          , AST.StringLiteral Nothing " was needed before it finished initializing (module "+          , AST.Var Nothing "moduleName"+          , AST.StringLiteral Nothing ", line "+          , AST.Var Nothing "lineNumber"+          , AST.StringLiteral Nothing ")"+          ], AST.Var Nothing "moduleName", AST.Var Nothing "lineNumber"])) Nothing+        , AST.Assignment Nothing (AST.Var Nothing "state") . AST.NumericLiteral Nothing $ Left 1+        , AST.Assignment Nothing (AST.Var Nothing "val") $ AST.App Nothing (AST.Var Nothing "init") []+        , AST.Assignment Nothing (AST.Var Nothing "state") . AST.NumericLiteral Nothing $ Left 2+        , AST.Return Nothing $ AST.Var Nothing "val"+        ]+      ]+++moduleBindToJs+  :: forall m+   . (Monad m, MonadReader Options m, MonadSupply m, MonadWriter Any m, MonadError MultipleErrors m)+  => ModuleName+  -> Bind Ann+  -> m [AST]+moduleBindToJs mn = bindToJs+  where   -- |   -- Generate code in the simplified JavaScript intermediate representation for a declaration   --@@ -166,7 +269,7 @@     -- ever applied; it's not possible to use them as values. So it's safe to     -- erase them.   bindToJs (NonRec ann ident val) = return <$> nonRecToJS ann ident val-  bindToJs (Rec vals) = forM vals (uncurry . uncurry $ nonRecToJS)+  bindToJs (Rec vals) = writer (applyLazinessTransform mn vals) >>= traverse (uncurry . uncurry $ nonRecToJS)    -- | Generate code in the simplified JavaScript intermediate representation for a single non-recursive   -- declaration.@@ -177,7 +280,7 @@     withoutComment <- asks optionsNoComments     if withoutComment        then nonRecToJS a i (modifyAnn removeComments e)-       else AST.Comment Nothing com <$> nonRecToJS a i (modifyAnn removeComments e)+       else AST.Comment (AST.SourceComments com) <$> nonRecToJS a i (modifyAnn removeComments e)   nonRecToJS (ss, _, _, _) ident val = do     js <- valueToJs val     withPos ss $ AST.VariableIntroduction Nothing (identToJs ident) (Just js)@@ -197,11 +300,15 @@   -- | Generate code in the simplified JavaScript intermediate representation for an accessor based on   -- a PureScript identifier. If the name is not valid in JavaScript (symbol based, reserved name) an   -- indexer is returned.-  accessor :: Ident -> AST -> AST-  accessor (Ident prop) = accessorString $ mkString prop-  accessor (GenIdent _ _) = internalError "GenIdent in accessor"-  accessor UnusedIdent = internalError "UnusedIdent in accessor"+  moduleAccessor :: Ident -> AST -> AST+  moduleAccessor (Ident prop) = moduleAccessorString prop+  moduleAccessor (GenIdent _ _) = internalError "GenIdent in moduleAccessor"+  moduleAccessor UnusedIdent = internalError "UnusedIdent in moduleAccessor"+  moduleAccessor InternalIdent{} = internalError "InternalIdent in moduleAccessor" +  moduleAccessorString :: Text -> AST -> AST+  moduleAccessorString = accessorString . mkString . T.replace "'" "$prime"+   accessorString :: PSString -> AST -> AST   accessorString prop = AST.Indexer Nothing (AST.StringLiteral Nothing prop) @@ -318,7 +425,7 @@   -- variable that may have a qualified name.   qualifiedToJS :: (a -> Ident) -> Qualified a -> AST   qualifiedToJS f (Qualified (Just C.Prim) a) = AST.Var Nothing . runIdent $ f a-  qualifiedToJS f (Qualified (Just mn') a) | mn /= mn' = accessor (f a) (AST.Var Nothing (moduleNameToJs mn'))+  qualifiedToJS f (Qualified (Just mn') a) | mn /= mn' = moduleAccessor (f a) (AST.Var Nothing (moduleNameToJs mn'))   qualifiedToJS f (Qualified _ a) = AST.Var Nothing $ identToJs (f a)    foreignIdent :: Ident -> AST@@ -434,23 +541,3 @@       done'' <- go done' (index + 1) bs'       js <- binderToJs elVar done'' binder       return (AST.VariableIntroduction Nothing elVar (Just (AST.Indexer Nothing (AST.NumericLiteral Nothing (Left index)) (AST.Var Nothing varName))) : js)--  -- Check that all integers fall within the valid int range for JavaScript.-  checkIntegers :: AST -> m ()-  checkIntegers = void . everywhereTopDownM go-    where-    go :: AST -> m AST-    go (AST.Unary _ AST.Negate (AST.NumericLiteral ss (Left i))) =-      -- Move the negation inside the literal; since this is a top-down-      -- traversal doing this replacement will stop the next case from raising-      -- the error when attempting to use -2147483648, as if left unrewritten-      -- the value is `Unary Negate (NumericLiteral (Left 2147483648))`, and-      -- 2147483648 is larger than the maximum allowed int.-      return $ AST.NumericLiteral ss (Left (-i))-    go js@(AST.NumericLiteral ss (Left i)) =-      let minInt = -2147483648-          maxInt = 2147483647-      in if i < minInt || i > maxInt-         then throwError . maybe errorMessage errorMessage' ss $ IntOutOfRange i "JavaScript" minInt maxInt-         else return js-    go other = return other
src/Language/PureScript/CodeGen/JS/Common.hs view
@@ -24,6 +24,8 @@ identToJs (Ident name) = anyNameToJs name identToJs (GenIdent _ _) = internalError "GenIdent in identToJs" identToJs UnusedIdent = unusedIdent+identToJs (InternalIdent RuntimeLazyFactory) = "$runtime_lazy"+identToJs (InternalIdent (Lazy name)) = "$lazy_" <> anyNameToJs name  -- | Convert a 'ProperName' into a valid JavaScript identifier: --
src/Language/PureScript/CodeGen/JS/Printer.hs view
@@ -15,10 +15,12 @@ import Data.Maybe (fromMaybe) import Data.Text (Text) import qualified Data.Text as T+import qualified Data.List.NonEmpty as NEL (toList)  import Language.PureScript.AST (SourceSpan(..)) import Language.PureScript.CodeGen.JS.Common import Language.PureScript.CoreImp.AST+import Language.PureScript.CoreImp.Module import Language.PureScript.Comments import Language.PureScript.Crash import Language.PureScript.Pretty.Common@@ -114,40 +116,70 @@     [ return $ emit "throw "     , prettyPrintJS' value     ]-  match (Comment _ com js) = mconcat <$> sequence+  match (Comment (SourceComments com) js) = mconcat <$> sequence     [ return $ emit "\n"     , mconcat <$> forM com comment     , prettyPrintJS' js     ]+  match (Comment PureAnnotation js) = mconcat <$> sequence +    [ return $ emit "/* #__PURE__ */ "+    , prettyPrintJS' js +    ]   match _ = mzero -  comment :: (Emit gen) => Comment -> StateT PrinterState Maybe gen-  comment (LineComment com) = mconcat <$> sequence-    [ currentIndent-    , return $ emit "//" <> emit com <> emit "\n"-    ]-  comment (BlockComment com) = fmap mconcat $ sequence $-    [ currentIndent-    , return $ emit "/**\n"-    ] ++-    map asLine (T.lines com) ++-    [ currentIndent-    , return $ emit " */\n"+comment :: (Emit gen) => Comment -> StateT PrinterState Maybe gen+comment (LineComment com) = mconcat <$> sequence+  [ currentIndent+  , return $ emit "//" <> emit com <> emit "\n"+  ]+comment (BlockComment com) = fmap mconcat $ sequence $+  [ currentIndent+  , return $ emit "/**\n"+  ] +++  map asLine (T.lines com) +++  [ currentIndent+  , return $ emit " */\n"+  , currentIndent+  ]+  where+  asLine :: (Emit gen) => Text -> StateT PrinterState Maybe gen+  asLine s = do+    i <- currentIndent+    return $ i <> emit " * " <> (emit . removeComments) s <> emit "\n"++  removeComments :: Text -> Text+  removeComments t =+    case T.stripPrefix "*/" t of+      Just rest -> removeComments rest+      Nothing -> case T.uncons t of+        Just (x, xs) -> x `T.cons` removeComments xs+        Nothing -> ""++prettyImport :: (Emit gen) => Import -> StateT PrinterState Maybe gen+prettyImport (Import ident from) =+  return . emit $+    "import * as " <> ident <> " from " <> prettyPrintStringJS from <> ";"++prettyExport :: (Emit gen) => Export -> StateT PrinterState Maybe gen+prettyExport (Export idents from) =+  mconcat <$> sequence+    [ return $ emit "export {\n"+    , withIndent $ do+        let exportsStrings = emit . exportedIdentToString from <$> idents+        indentString <- currentIndent+        return . intercalate (emit ",\n") . NEL.toList $ (indentString <>) <$> exportsStrings+    , return $ emit "\n"     , currentIndent+    , return . emit $ "}" <> maybe "" ((" from " <>) . prettyPrintStringJS) from <> ";"     ]-    where-    asLine :: (Emit gen) => Text -> StateT PrinterState Maybe gen-    asLine s = do-      i <- currentIndent-      return $ i <> emit " * " <> (emit . removeComments) s <> emit "\n"--    removeComments :: Text -> Text-    removeComments t =-      case T.stripPrefix "*/" t of-        Just rest -> removeComments rest-        Nothing -> case T.uncons t of-          Just (x, xs) -> x `T.cons` removeComments xs-          Nothing -> ""+  where+  exportedIdentToString Nothing ident+    | nameIsJsReserved ident || nameIsJsBuiltIn ident+    = "$$" <> ident <> " as " <> ident+  exportedIdentToString _ "$main"+    = T.concatMap identCharToText "$main" <> " as $main"+  exportedIdentToString _ ident+    = T.concatMap identCharToText ident  accessor :: Pattern PrinterState AST (Text, AST) accessor = mkPattern match@@ -217,14 +249,22 @@   indentString <- currentIndent   return $ intercalate (emit "\n") $ map ((<> emit ";") . (indentString <>)) jss +prettyModule :: (Emit gen) => Module -> StateT PrinterState Maybe gen+prettyModule Module{..} = do+  header <- mconcat <$> traverse comment modHeader+  imps <- traverse prettyImport modImports+  body <- prettyStatements modBody+  exps <- traverse prettyExport modExports+  pure $ header <> intercalate (emit "\n") (imps ++ body : exps)+ -- | Generate a pretty-printed string representing a collection of JavaScript expressions at the same indentation level-prettyPrintJSWithSourceMaps :: [AST] -> (Text, [SMap])+prettyPrintJSWithSourceMaps :: Module -> (Text, [SMap]) prettyPrintJSWithSourceMaps js =-  let StrPos (_, s, mp) = (fromMaybe (internalError "Incomplete pattern") . flip evalStateT (PrinterState 0) . prettyStatements) js+  let StrPos (_, s, mp) = (fromMaybe (internalError "Incomplete pattern") . flip evalStateT (PrinterState 0) . prettyModule) js   in (s, mp) -prettyPrintJS :: [AST] -> Text-prettyPrintJS = maybe (internalError "Incomplete pattern") runPlainString . flip evalStateT (PrinterState 0) . prettyStatements+prettyPrintJS :: Module -> Text+prettyPrintJS = maybe (internalError "Incomplete pattern") runPlainString . flip evalStateT (PrinterState 0) . prettyModule  -- | Generate an indented, pretty-printed string representing a JavaScript expression prettyPrintJS' :: (Emit gen) => AST -> StateT PrinterState Maybe gen
+ src/Language/PureScript/Comments.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE TemplateHaskell #-}++-- |+-- Defines the types of source code comments+--+module Language.PureScript.Comments where++import Prelude.Compat+import Codec.Serialise (Serialise)+import Control.DeepSeq (NFData)+import Data.Text (Text)+import GHC.Generics (Generic)++import Data.Aeson.TH++data Comment+  = LineComment Text+  | BlockComment Text+  deriving (Show, Eq, Ord, Generic)++instance NFData Comment+instance Serialise Comment++$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''Comment)
src/Language/PureScript/Constants/Prelude.hs view
@@ -273,6 +273,33 @@ pattern IsSymbol :: Qualified (ProperName 'ClassName) pattern IsSymbol = Qualified (Just DataSymbol) (ProperName "IsSymbol") +pattern DataReflectable :: ModuleName+pattern DataReflectable = ModuleName "Data.Reflectable"++pattern Reflectable :: Qualified (ProperName 'ClassName)+pattern Reflectable = Qualified (Just DataReflectable) (ProperName "Reflectable")++pattern DataOrdering :: ModuleName+pattern DataOrdering = ModuleName "Data.Ordering"++pattern DataFunctionUncurried :: ModuleName+pattern DataFunctionUncurried = ModuleName "Data.Function.Uncurried"++pattern PartialUnsafe :: ModuleName+pattern PartialUnsafe = ModuleName "Partial.Unsafe"++pattern Ordering :: Qualified (ProperName 'TypeName)+pattern Ordering = Qualified (Just DataOrdering) (ProperName "Ordering")++pattern LT :: Qualified (ProperName 'ConstructorName)+pattern LT = Qualified (Just DataOrdering) (ProperName "LT")++pattern EQ :: Qualified (ProperName 'ConstructorName)+pattern EQ = Qualified (Just DataOrdering) (ProperName "EQ")++pattern GT :: Qualified (ProperName 'ConstructorName)+pattern GT = Qualified (Just DataOrdering) (ProperName "GT")+ dataArray :: forall a. (IsString a) => a dataArray = "Data_Array" 
+ src/Language/PureScript/Constants/Prim.hs view
@@ -0,0 +1,197 @@+-- | Various constants which refer to things in Prim+module Language.PureScript.Constants.Prim where++import Prelude.Compat++import Data.String (IsString)+import Language.PureScript.Names++-- Prim values++undefined :: forall a. (IsString a) => a+undefined = "undefined"++-- Prim++pattern Prim :: ModuleName+pattern Prim = ModuleName "Prim"++pattern Partial :: Qualified (ProperName 'ClassName)+pattern Partial = Qualified (Just Prim) (ProperName "Partial")++pattern Record :: Qualified (ProperName 'TypeName)+pattern Record = Qualified (Just Prim) (ProperName "Record")++pattern Type :: Qualified (ProperName 'TypeName)+pattern Type = Qualified (Just Prim) (ProperName "Type")++pattern Constraint :: Qualified (ProperName 'TypeName)+pattern Constraint = Qualified (Just Prim) (ProperName "Constraint")++pattern Function :: Qualified (ProperName 'TypeName)+pattern Function = Qualified (Just Prim) (ProperName "Function")++pattern Array :: Qualified (ProperName 'TypeName)+pattern Array = Qualified (Just Prim) (ProperName "Array")++pattern Row :: Qualified (ProperName 'TypeName)+pattern Row = Qualified (Just Prim) (ProperName "Row")++-- Prim.Boolean++pattern PrimBoolean :: ModuleName+pattern PrimBoolean = ModuleName "Prim.Boolean"++booleanTrue :: Qualified (ProperName 'TypeName)+booleanTrue = Qualified (Just PrimBoolean) (ProperName "True")++booleanFalse :: Qualified (ProperName 'TypeName)+booleanFalse = Qualified (Just PrimBoolean) (ProperName "False")++-- Prim.Coerce++pattern PrimCoerce :: ModuleName+pattern PrimCoerce = ModuleName "Prim.Coerce"++pattern Coercible :: Qualified (ProperName 'ClassName)+pattern Coercible = Qualified (Just PrimCoerce) (ProperName "Coercible")++-- Prim.Ordering++pattern PrimOrdering :: ModuleName+pattern PrimOrdering = ModuleName "Prim.Ordering"++orderingLT :: Qualified (ProperName 'TypeName)+orderingLT = Qualified (Just PrimOrdering) (ProperName "LT")++orderingEQ :: Qualified (ProperName 'TypeName)+orderingEQ = Qualified (Just PrimOrdering) (ProperName "EQ")++orderingGT :: Qualified (ProperName 'TypeName)+orderingGT = Qualified (Just PrimOrdering) (ProperName "GT")++-- Prim.Row++pattern PrimRow :: ModuleName+pattern PrimRow = ModuleName "Prim.Row"++pattern RowUnion :: Qualified (ProperName 'ClassName)+pattern RowUnion = Qualified (Just PrimRow) (ProperName "Union")++pattern RowNub :: Qualified (ProperName 'ClassName)+pattern RowNub = Qualified (Just PrimRow) (ProperName "Nub")++pattern RowCons :: Qualified (ProperName 'ClassName)+pattern RowCons = Qualified (Just PrimRow) (ProperName "Cons")++pattern RowLacks :: Qualified (ProperName 'ClassName)+pattern RowLacks = Qualified (Just PrimRow) (ProperName "Lacks")++-- Prim.RowList++pattern PrimRowList :: ModuleName+pattern PrimRowList = ModuleName "Prim.RowList"++pattern RowToList :: Qualified (ProperName 'ClassName)+pattern RowToList = Qualified (Just PrimRowList) (ProperName "RowToList")++pattern RowListNil :: Qualified (ProperName 'TypeName)+pattern RowListNil = Qualified (Just PrimRowList) (ProperName "Nil")++pattern RowListCons :: Qualified (ProperName 'TypeName)+pattern RowListCons = Qualified (Just PrimRowList) (ProperName "Cons")++-- Prim.Int++pattern PrimInt :: ModuleName+pattern PrimInt = ModuleName "Prim.Int"++pattern IntAdd :: Qualified (ProperName 'ClassName)+pattern IntAdd = Qualified (Just PrimInt) (ProperName "Add")++pattern IntCompare :: Qualified (ProperName 'ClassName)+pattern IntCompare = Qualified (Just PrimInt) (ProperName "Compare")++pattern IntMul :: Qualified (ProperName 'ClassName)+pattern IntMul = Qualified (Just PrimInt) (ProperName "Mul")++pattern IntToString :: Qualified (ProperName 'ClassName)+pattern IntToString = Qualified (Just PrimInt) (ProperName "ToString")++-- Prim.Symbol++pattern PrimSymbol :: ModuleName+pattern PrimSymbol = ModuleName "Prim.Symbol"++pattern SymbolCompare :: Qualified (ProperName 'ClassName)+pattern SymbolCompare = Qualified (Just PrimSymbol) (ProperName "Compare")++pattern SymbolAppend :: Qualified (ProperName 'ClassName)+pattern SymbolAppend = Qualified (Just PrimSymbol) (ProperName "Append")++pattern SymbolCons :: Qualified (ProperName 'ClassName)+pattern SymbolCons = Qualified (Just PrimSymbol) (ProperName "Cons")++-- Prim.TypeError++pattern PrimTypeError :: ModuleName+pattern PrimTypeError = ModuleName "Prim.TypeError"++pattern Fail :: Qualified (ProperName 'ClassName)+pattern Fail = Qualified (Just PrimTypeError) (ProperName "Fail")++pattern Warn :: Qualified (ProperName 'ClassName)+pattern Warn = Qualified (Just PrimTypeError) (ProperName "Warn")++primModules :: [ModuleName]+primModules = [Prim, PrimBoolean, PrimCoerce, PrimOrdering, PrimRow, PrimRowList, PrimSymbol, PrimInt, PrimTypeError]++typ :: forall a. (IsString a) => a+typ = "Type"++kindOrdering :: forall a. (IsString a) => a+kindOrdering = "Ordering"++kindRowList :: forall a. (IsString a) => a+kindRowList = "RowList"++symbol :: forall a. (IsString a) => a+symbol = "Symbol"++doc :: forall a. (IsString a) => a+doc = "Doc"++row :: forall a. (IsString a) => a+row = "Row"++constraint :: forall a. (IsString a) => a+constraint = "Constraint"++-- Modules++prim :: forall a. (IsString a) => a+prim = "Prim"++moduleBoolean :: forall a. (IsString a) => a+moduleBoolean = "Boolean"++moduleCoerce :: forall a. (IsString a) => a+moduleCoerce = "Coerce"++moduleOrdering :: forall a. (IsString a) => a+moduleOrdering = "Ordering"++moduleRow :: forall a. (IsString a) => a+moduleRow = "Row"++moduleRowList :: forall a. (IsString a) => a+moduleRowList = "RowList"++moduleSymbol :: forall a. (IsString a) => a+moduleSymbol = "Symbol"++moduleInt :: forall a. (IsString a) => a+moduleInt = "Int"++typeError :: forall a. (IsString a) => a+typeError = "TypeError"
+ src/Language/PureScript/CoreFn/Laziness.hs view
@@ -0,0 +1,569 @@+module Language.PureScript.CoreFn.Laziness+  ( applyLazinessTransform+  ) where++import Protolude hiding (force)+import Protolude.Unsafe (unsafeHead)++import Control.Arrow ((&&&))+import qualified Data.Array as A+import Data.Coerce (coerce)+import Data.Graph (SCC(..), stronglyConnComp)+import Data.List (foldl1', (!!))+import qualified Data.IntMap.Monoidal as IM+import qualified Data.IntSet as IS+import qualified Data.Map.Monoidal as M+import Data.Semigroup (Max(..))+import qualified Data.Set as S++import Language.PureScript.AST.SourcePos+import qualified Language.PureScript.Constants.Prelude as C+import Language.PureScript.CoreFn+import Language.PureScript.Crash+import Language.PureScript.Names+import Language.PureScript.PSString (mkString)++-- This module is responsible for ensuring that the bindings in recursive+-- binding groups are initialized in a valid order, introducing run-time+-- laziness and initialization checks as necessary.+--+-- PureScript is a call-by-value language with strict data constructors, this+-- transformation notwithstanding. The only laziness introduced here is in the+-- initialization of a binding. PureScript is uninterested in the order in+-- which bindings are written by the user. The compiler has always attempted to+-- emit the bindings in an order that makes sense for the backend, but without+-- this transformation, recursive bindings are emitted in an arbitrary order,+-- which can cause unexpected behavior at run time if a binding is dereferenced+-- before it has initialized.+--+-- To prevent unexpected errors, this transformation does a syntax-driven+-- analysis of a single recursive binding group to attempt to statically order+-- the bindings, and when that fails, falls back to lazy initializers that will+-- succeed or fail deterministically with a clear error at run time.+--+-- Example:+--+--   x = f \_ ->+--     x+--+-- becomes (with some details of the $runtime_lazy function elided):+-- +--   -- the binding of x has been rewritten as a lazy initializer+--   $lazy_x = $runtime_lazy \_ ->+--     f \_ ->+--       $lazy_x 2  -- the reference to x has been rewritten as a force call+--   x = $lazy_x 1+--+-- Central to this analysis are the concepts of delay and force, which are+-- attributes given to every subexpression in the binding group. Delay and+-- force are defined by the following traversal. This traversal is used twice:+-- once to collect all the references made by each binding in the group, and+-- then again to rewrite some references to force calls. (The implications of+-- delay and force on initialization order are specified later.)++-- |+-- Visits every `Var` in an expression with the provided function, including+-- the amount of delay and force applied to that `Var`, and substitutes the+-- result back into the tree (propagating an `Applicative` effect).+--+-- Delay is a non-negative integer that represents the number of lambdas that+-- enclose an expression. Force is a non-negative integer that represents the+-- number of values that are being applied to an expression. Delay is always+-- statically determinable, but force can be *unknown*, so it's represented+-- here with a Maybe. In a function application `f a b`, `f` has force 2, but+-- `a` and `b` have unknown force--it depends on what `f` does with them.+--+-- The rules of assigning delay and force are simple:+--   * The expressions that are assigned to bindings in this group have+--     delay 0, force 0.+--   * In a function application, the function expression has force 1 higher+--     than the force of the application expression, and the argument+--     expression has unknown force.+--     * UNLESS this argument is being directly provided to a constructor (in+--       other words, the function expression is either a constructor itself or+--       a constructor that has already been partially applied), in which case+--       the force of both subexpressions is unchanged. We can assume that+--       constructors don't apply any additional force to their arguments.+--   * If the force of a lambda is zero, the delay of the body of the lambda is+--     incremented; otherwise, the force of the body of the lambda is+--     decremented. (Applying one argument to a lambda cancels out one unit of+--     delay.)+--   * In the argument of a Case and the bindings of a Let, force is unknown.+--   * Everywhere else, preserve the delay and force of the enclosing+--     expression.+--+-- Here are some illustrative examples of the above rules. We will use a+-- pseudocode syntax to annotate a subexpression with delay and force:+-- `expr#d!f` means `expr` has delay d and force f. `!*` is used to denote+-- unknown force.+--+--   x = y#0!0+--   x = y#0!2 a#0!* b#0!*+--   x = (\_ -> y#1!0)#0!0+--   x = \_ _ -> y#2!1 a#2!*+--   x = (\_ -> y#0!0)#0!1 z#0!*+--   x = Just { a: a#0!0, b: b#0!0 }+--   x = let foo = (y#1!* a b#1!*)#1!* in foo + 1+--+-- (Note that this analysis is quite ignorant of any actual control flow+-- choices made at run time. It doesn't even track what happens to a reference+-- after it has been locally bound by a Let or Case. Instead, it just assumes+-- the worst--once locally bound to a new name, it imagines that absolutely+-- anything could happen to that new name and thus to the underlying reference.+-- But the value-to-weight ratio of this approach is perhaps surprisingly+-- high.)+--+-- Every subexpression gets a delay and a force, but we are only interested+-- in references to other bindings in the binding group, so the traversal only+-- exposes `Var`s to the provided function.+--+onVarsWithDelayAndForce :: forall f. Applicative f => (Int -> Maybe Int -> Ann -> Qualified Ident -> f (Expr Ann)) -> Expr Ann -> f (Expr Ann)+onVarsWithDelayAndForce f = snd . go 0 $ Just 0+  where+  go :: Int -> Maybe Int -> (Bind Ann -> f (Bind Ann), Expr Ann -> f (Expr Ann))+  go delay force = (handleBind, handleExpr')+    where+    (handleBind, handleExpr, handleBinder, handleCaseAlternative) = traverseCoreFn handleBind handleExpr' handleBinder handleCaseAlternative+    handleExpr' = \case+      Var a i -> f delay force a i+      Abs a i e -> Abs a i <$> snd (if force == Just 0 then go (succ delay) force else go delay $ fmap pred force) e+      -- A clumsy hack to preserve TCO in a particular idiom of unsafePartial once seen in Data.Map.Internal, possibly still used elsewhere.+      App a1 e1@(Var _ (Qualified (Just C.PartialUnsafe) (Ident up))) (Abs a2 i e2) | up == C.unsafePartial+        -> App a1 e1 . Abs a2 i <$> handleExpr' e2+      App a e1 e2 ->+        -- `handleApp` is just to handle the constructor application exception+        -- somewhat gracefully (i.e., without requiring a deep inspection of+        -- the function expression at every step). If we didn't care about+        -- constructors, this could have been simply:+        --   App a <$> snd (go delay (fmap succ force)) e1 <*> snd (go delay Nothing) e2+        handleApp 1 [(a, e2)] e1+      Case a vs alts -> Case a <$> traverse (snd $ go delay Nothing) vs <*> traverse handleCaseAlternative alts+      Let a ds e -> Let a <$> traverse (fst $ go delay Nothing) ds <*> handleExpr' e+      other -> handleExpr other++    handleApp len args = \case+      App a e1 e2 -> handleApp (len + 1) ((a, e2) : args) e1+      Var a@(_, _, _, Just meta) i | isConstructorLike meta+        -> foldl (\e1 (a2, e2) -> App a2 <$> e1 <*> handleExpr' e2) (f delay force a i) args+      e -> foldl (\e1 (a2, e2) -> App a2 <$> e1 <*> snd (go delay Nothing) e2) (snd (go delay (fmap (+ len) force)) e) args+    isConstructorLike = \case+      IsConstructor{} -> True+      IsNewtype -> True+      _ -> False++-- Once we assign a delay and force value to every `Var` in the binding group,+-- we can consider how to order the bindings to allow them all to successfully+-- initialize. There is one principle here: each binding must be initialized+-- before the identifier being bound is ready for use. If the preorder thus+-- induced has cycles, those cycles need to be resolved with laziness. All of+-- the details concern what "ready for use" means.+--+-- The definition of delay and force suggests that "ready for use" depends on+-- those attributes. If a lambda is bound to the name x, then the references in+-- the lambda don't need to be initialized before x is initialized. This is+-- represented by the fact that those references have non-zero delay. But if+-- the expression bound to x is instead the application of a function y that is+-- also bound in this binding group, then not only does y need to be+-- initialized before x, so do some of the non-zero delay references in y. This+-- is represented by the fact that the occurrence of y in the expression bound+-- to x has non-zero force.+--+-- An example, reusing the pseudocode annotations defined above:+--+--   x _ = y#1!0+--   y = x#0!1 a+--+-- y doesn't need to be initialized before x is, because the reference to y in+-- x's initializer has delay 1. But y does need to be initialized before x is+-- ready for use with force 1, because force 1 is enough to overcome the delay+-- of that reference. And since y has a delay-0 reference to x with force 1, y+-- will need to be ready for use before it is initialized; thus, y needs to be+-- made lazy.+--+-- So just as function applications "cancel out" lambdas, a known applied force+-- cancels out an equal amount of delay, causing some references that may not+-- have been needed earlier to enter play. (And to be safe, we must assume that+-- unknown force cancels out *any* amount of delay.) There is another, subtler+-- aspect of this: if there are not enough lambdas to absorb every argument+-- applied to a function, those arguments will end up applied to the result of+-- the function. Likewise, if there is excess force left over after some of it+-- has been canceled by delay, that excess is carried to the references+-- activated. (Again, an unknown amount of force must be assumed to lead to an+-- unknown amount of excess force.)+--+-- Another example:+--+--   f = g#0!2 a b+--   g x = h#1!2 c x+--   h _ _ _ = f#3!0+--+-- Initializing f will lead to an infinite loop in this example. f invokes g+-- with two arguments. g absorbs one argument, and the second ends up being+-- applied to the result of h c x, resulting in h being invoked with three+-- arguments. Invoking h with three arguments results in dereferencing f, which+-- is not yet ready. To capture this loop in our analysis, we say that making+-- f ready for use with force 0 requires making g ready for use with force 2,+-- which requires making h ready for use with force 3 (two units of force from+-- the lexical position of h, plus one unit of excess force carried forward),+-- which cyclically requires f to be ready for use with force 0.+--+-- These preceding observations are captured and generalized by the following+-- rules:+--+--   USE-INIT: Before a reference to x is ready for use with any force, x must+--     be initialized.+--+--     We will make x lazy iff this rule induces a cycle--i.e., initializing x+--     requires x to be ready for use first.+--+--   USE-USE: Before a reference to x is ready for use with force f:+--     * if a reference in the initializer of x has delay d and force f',+--     * and either d <= f or f is unknown,+--     * then that reference must itself be ready for use with+--       force f – d + f' (or with unknown force if f or f' is unknown).+--+--   USE-IMMEDIATE: Initializing a binding x is equivalent to requiring a+--     reference to x to be ready for use with force 0, per USE-USE.+--     +--     Equivalently: before x is initialized, any reference in the initializer+--     of x with delay 0 and force f must be ready for use with force f.+--+-- Examples:+--+--   Assume x is bound in a recursive binding group with the below bindings.+--+--   All of the following initializers require x to be ready for use with some+--   amount of force, and therefore require x to be initialized first.+--+--   a = x#0!0+--   b = (\_ -> x#0!0) 1+--   c = foo x#0!*+--   d = (\_ -> foo x#0!*) 1+--+--   In the following initializers, before p can be initialized, x must be+--   ready for use with force f – d + f'. (And both x and q must be+--   initialized, of course; but x being ready for use with that force may+--   induce additional constraints.)+--+--   p = ... q#0!f ...+--   q = ... x#d!f' ... (where d <= f)+--+--   Excess force stacks, of course: in the following initializers, before r+--   can be initialized, x must be ready for use with force+--   f — d + f' — d' + f'':+--+--   r = ... s#0!f ...+--   s = ... t#d!f' ... (where d <= f)+--   t = ... x#d'!f'' ... (where d' <= f – d + f')+--+--+-- To satisfy these rules, we will construct a graph between (identifier,+-- delay) pairs, with edges induced by the USE-USE rule, and effectively run a+-- topsort to get the initialization preorder. For this part, it's simplest to+-- think of delay as an element of the naturals extended with a positive+-- infinity, corresponding to an unknown amount of force. (We'll do arithmetic+-- on these extended naturals as you would naively expect; we won't do anything+-- suspect like subtracting infinity from infinity.) With that in mind, we can+-- construct the graph as follows: for each reference from i1 to i2 with delay+-- d and force f, draw an infinite family of edges from (i1, d + n) to (i2, f ++-- n) for all 0 <= n <= ∞, where n represents the excess force carried over+-- from a previous edge. Unfortunately, as an infinite graph, we can't expect+-- the tools in Data.Graph to help us traverse it; we will have to be a little+-- bit clever.+--+-- The following data types and functions are for searching this infinite graph+-- and carving from it a finite amount of data to work with. Specifically, we+-- want to know for each identifier i, which other identifiers are+-- irreflexively reachable from (i, 0) (and thus must be initialized before i+-- is), and with what maximum force (in the event of a loop, not every+-- reference to i in the reachable identifier needs to be rewritten to a force+-- call; only the ones with delay up to the maximum force used during i's+-- initialization). We also want the option of aborting a given reachability+-- search, for one of two reasons.+--+--   * If we encounter a reference with unknown force, abort.+--   * If we encounter a cycle where force on a single identifier is+--     increasing, abort. (Because of USE-USE, as soon as an identifier is+--     revisited with greater force than its first visit, the difference is+--     carried forward as excess, so it is possible to retrace that path to get+--     an arbitrarily high amount of force.)+--+-- Both reasons mean that it is theoretically possible for the identifier in+-- question to need every other identifier in the binding group to be+-- initialized before it is. (Every identifier in a recursive binding group is+-- necessarily reachable from every other, ignoring delay and force, which is+-- what arbitrarily high force lets you do.)+--+-- In order to reuse parts of this reachability computation across identifiers,+-- we are going to represent it with a rose tree data structure interleaved with+-- a monad capturing the abort semantics. (The monad is Maybe, but we don't+-- need to know that here!)++type MaxRoseTree m a = m (IM.MonoidalIntMap (MaxRoseNode m a))+data MaxRoseNode m a = MaxRoseNode a (MaxRoseTree m a)++-- Dissecting this data structure:+--+-- m (...)+-- ^ represents whether to abort or continue the search+--+--   IM.MonoidalIntMap (...)+--   ^ the keys of this map are other identifiers reachable from the current+--     one (we'll map the identifiers in this binding group to Ints for ease of+--     computation)+--+--     the values of this map are:+--+--     MaxRoseNode a (...)+--     ^ this will store the force applied to the next identifier+--       (MaxRoseTree m a)+--       ^ and this, the tree of identifiers reachable from there+--+-- We're only interested in continuing down the search path that applies the+-- most force to a given identifier! So when we combine two MaxRoseTrees,+-- we want to resolve any key collisions in their MonoidalIntMaps with this+-- semigroup:++instance Ord a => Semigroup (MaxRoseNode m a) where+  l@(MaxRoseNode l1 _) <> r@(MaxRoseNode r1 _) = if r1 > l1 then r else l++-- And that's why this is called a MaxRoseTree.+--+-- Traversing this tree to get a single MonoidalIntMap with the entire closure+-- plus force information is fairly straightforward:++mrtFlatten :: (Monad m, Ord a) => MaxRoseTree m a -> m (IM.MonoidalIntMap (Max a))+mrtFlatten = (getAp . IM.foldMapWithKey (\i (MaxRoseNode a inner) -> Ap $ (IM.singleton i (Max a) <>) <$> mrtFlatten inner) =<<)++-- The use of the `Ap` monoid ensures that if any child of this tree aborts,+-- the entire tree aborts.+--+-- One might ask, why interleave the abort monad with the tree at all if we're+-- just going to flatten it out at the end? The point is to flatten it out at+-- the end, but *not* during the generation of the tree. Attempting to flatten+-- the tree as we generate it can result in an infinite loop, because a subtree+-- needs to be exhaustively searched for abort conditions before it can be used+-- in another tree. With this approach, we can use lazy trees as building+-- blocks and, as long as they get rewritten to be finite or have aborts before+-- they're flattened, the analysis still terminates.++-- |+-- Given a maximum index and a function that returns a map of edges to next+-- indices, returns an array for each index up to maxIndex of maps from the+-- indices reachable from the current index, to the maximum force applied to+-- those indices.+searchReachable+  :: forall m force+   . (Alternative m, Monad m, Enum force, Ord force)+  => Int+  -> ((Int, force) -> m (IM.MonoidalIntMap (Max force)))+  -> A.Array Int (m (IM.MonoidalIntMap (Max force)))+searchReachable maxIdx lookupEdges = mrtFlatten . unsafeHead <$> mem+  where+  -- This is a finite array of infinite lists, used to memoize all the search+  -- trees. `unsafeHead` is used above to pull the first tree out of each list+  -- in the array--the one corresponding to zero force, which is what's needed+  -- to initialize the corresponding identifier. (`unsafeHead` is safe here, of+  -- course: infinite lists.)+  mem :: A.Array Int [MaxRoseTree m force]+  mem = A.listArray (0, maxIdx)+    [ [cutLoops <*> fmap (IM.mapWithKey memoizedNode) . lookupEdges $ (i, f) | f <- [toEnum 0..]]+    | i <- [0..maxIdx]+    ]++  memoizedNode :: Int -> Max force -> MaxRoseNode m force+  memoizedNode i (Max force) = MaxRoseNode force $ mem A.! i !! fromEnum force++  -- And this is the function that prevents the search from actually being+  -- infinite. It applies a filter to a `MaxRoseTree` at every level, looking for+  -- indices anywhere in the tree that match the current vertex. If a match is+  -- found with greater force than the current force, that part of the tree is+  -- rewritten to abort; otherwise, that part of the tree is rewritten to be+  -- empty (there's nothing new in that part of the search).+  --+  -- A new version of `cutLoops` is applied for each node in the search, so+  -- each edge in a search path will add another filter on a new index. Since+  -- there are a finite number of indices in our universe, this guarantees that+  -- the analysis terminates, because no single search path can have length+  -- greater than `maxIdx`.+  cutLoops :: (Int, force) -> MaxRoseTree m force -> MaxRoseTree m force+  cutLoops (i, force) = go+    where+    go = (=<<) . IM.traverseWithKey $ \i' (MaxRoseNode force' inner) ->+      MaxRoseNode force' <$> if i == i' then guard (force >= force') $> pure IM.empty else pure $ go inner++-- One last data structure to define and then it's on to the main event.+--+-- The laziness transform effectively takes a list of eager bindings (x = ...)+-- and splits some of them into lazy definitions ($lazy_x = ...) and lazy+-- bindings (x = $lazy_x ...). It's convenient to work with these three+-- declarations as the following sum type:++data RecursiveGroupItem e = EagerBinding Ann e | LazyDefinition e | LazyBinding Ann+  deriving Functor++-- |+-- Transform a recursive binding group, reordering the bindings within when a+-- correct initialization order can be statically determined, and rewriting+-- bindings and references to be lazy otherwise.+--+applyLazinessTransform :: ModuleName -> [((Ann, Ident), Expr Ann)] -> ([((Ann, Ident), Expr Ann)], Any)+applyLazinessTransform mn rawItems = let++  -- Establish the mapping from names to ints.+  rawItemsByName :: M.MonoidalMap Ident (Ann, Expr Ann)+  rawItemsByName = M.fromList $ (snd . fst &&& first fst) <$> rawItems++  maxIdx = M.size rawItemsByName - 1++  rawItemsByIndex :: A.Array Int (Ann, Expr Ann)+  rawItemsByIndex = A.listArray (0, maxIdx) $ M.elems rawItemsByName++  names :: S.Set Ident+  names = M.keysSet rawItemsByName++  -- Now do the first delay/force traversal of all the bindings to find+  -- references to other names in this binding group.+  --+  -- The parts of this type mean:+  -- D is the maximum force (or Nothing if unknown) with which the identifier C+  -- is referenced in any delay-B position inside the expression A.+  --+  -- where A, B, C, and D are as below:+  --                A           B (keys)           C (keys)           D+  findReferences :: Expr Ann -> IM.MonoidalIntMap (IM.MonoidalIntMap (Ap Maybe (Max Int)))+  findReferences = (getConst .) . onVarsWithDelayAndForce $ \delay force _ -> \case+    Qualified mn' ident | all (== mn) mn', Just i <- ident `S.lookupIndex` names+      -> Const . IM.singleton delay . IM.singleton i $ coerceForce force+    _ -> Const IM.empty++  -- The parts of this type mean:+  -- D is the maximum force (or Nothing if unknown) with which the identifier C+  -- is referenced in any delay-B position inside the binding of identifier A.+  --+  -- where A, B, C, and D are as below:+  --                     A    B (keys)           C (keys)           D+  refsByIndex :: A.Array Int (IM.MonoidalIntMap (IM.MonoidalIntMap (Ap Maybe (Max Int))))+  refsByIndex = findReferences . snd <$> rawItemsByIndex++  -- Using the approach explained above, traverse the reference graph generated+  -- by `refsByIndex` and find all reachable names.+  --+  -- The parts of this type mean:+  -- D is the maximum force with which the identifier C is referenced,+  -- directly or indirectly, during the initialization of identifier A. B is+  -- Nothing if the analysis of A was inconclusive and A might need the entire+  -- binding group.+  -- +  -- where A, B, C, and D are as below:+  --                           A    B      C (keys)           D+  reachablesByIndex :: A.Array Int (Maybe (IM.MonoidalIntMap (Max Int)))+  reachablesByIndex = searchReachable maxIdx $ \(i, force) ->+    getAp . flip IM.foldMapWithKey (dropKeysAbove force $ refsByIndex A.! i) $ \delay ->+      IM.foldMapWithKey $ \i' force' ->+        Ap $ IM.singleton i' . Max . (force - delay +) <$> uncoerceForce force'++  -- If `reachablesByIndex` is a sort of labeled relation, this function+  -- produces part of the reverse relation, but only for the edges from the+  -- given vertex.+  --+  -- The parts of this type mean:+  -- The identifier A is reachable from the identifier B with maximum force C+  -- (B is also the index provided to the function).+  --+  -- where A, B, and C are as below:+  --                      (B)    A                  B (singleton key)  C+  reverseReachablesFor :: Int -> IM.MonoidalIntMap (IM.MonoidalIntMap (Ap Maybe (Max Int)))+  reverseReachablesFor i = case reachablesByIndex A.! i of+    Nothing -> IM.fromAscList $ (, IM.singleton i $ Ap Nothing) <$> [0..maxIdx]+    Just im -> IM.singleton i . Ap . Just <$> im++  -- We can use `reachablesByIndex` to build a finite graph and topsort it;+  -- in the process, we'll pack the nodes of the graph with data we'll want+  -- next. Remember that if our reachability computation aborted, we have to+  -- assume that every other identifier is reachable from that one--hence the+  -- `maybe [0..maxIdx]`.+  sccs = stronglyConnComp $ do+    (i, mbReachable) <- A.assocs reachablesByIndex+    pure ((reverseReachablesFor i, (S.elemAt i names, rawItemsByIndex A.! i)), i, maybe [0..maxIdx] (IS.toList . IM.keysSet) mbReachable)++  (replacements, items) = flip foldMap sccs $ \case+    -- The easy case: this binding doesn't need to be made lazy after all!+    AcyclicSCC (_, (ident, (a, e))) -> pure [(ident, EagerBinding a e)]+    -- The tough case: we have a loop.+    -- We need to do two things here:+    --   * Collect the reversed reachables relation for each vertex in this+    --     loop; we'll use this to replace references with force calls+    --   * Copy the vertex list into two lists: a list of lazy definitions and+    --     a list of lazy bindings+    -- Both of these results are monoidal, so the outer `foldMap` will+    -- concatenate them pairwise.+    CyclicSCC vertices -> (foldMap fst vertices, map (fmap (LazyDefinition . snd) . snd) vertices ++ map (fmap (LazyBinding . fst) . snd) vertices)++  -- We have `replacements` expressed in terms of indices; we want to map it+  -- back to names before traversing the bindings again.+  replacementsByName :: M.MonoidalMap Ident (M.MonoidalMap Ident (Ap Maybe (Max Int)))+  replacementsByName = M.fromAscList . map (bimap (flip S.elemAt names) (M.fromAscList . map (first (flip S.elemAt names)) . IM.toAscList)) . IM.toAscList $ replacements++  -- And finally, this is the second delay/force traversal where we take+  -- `replacementsByName` and use it to rewrite references with force calls,+  -- but only if the delay of those references is at most the maximum amount+  -- of force used by the initialization of the referenced binding to+  -- reference the outer binding. A reference made with a higher delay than+  -- that can safely continue to use the original reference, since it won't be+  -- needed until after the referenced binding is done initializing.+  replaceReferencesWithForceCall :: (Ident, RecursiveGroupItem (Expr Ann)) -> (Ident, RecursiveGroupItem (Expr Ann))+  replaceReferencesWithForceCall pair@(ident, item) = case ident `M.lookup` replacementsByName of+    Nothing -> pair+    Just m -> let+      rewriteExpr = (runIdentity .) . onVarsWithDelayAndForce $ \delay _ ann -> pure . \case+        Qualified mn' ident' | all (== mn) mn', any (all (>= Max delay) . getAp) $ ident' `M.lookup` m+          -> makeForceCall ann ident'+        q -> Var ann q+      in (ident, rewriteExpr <$> item)++  -- All that's left to do is run the above replacement on every item,+  -- translate items from our `RecursiveGroupItem` representation back into the+  -- form CoreFn expects, and inform the caller whether we made any laziness+  -- transformations after all. (That last bit of information is used to+  -- determine if the runtime factory function needs to be injected.)+  in (uncurry fromRGI . replaceReferencesWithForceCall <$> items, Any . not $ IM.null replacements)++  where++  nullAnn = ssAnn nullSourceSpan+  runtimeLazy = Var nullAnn . Qualified Nothing $ InternalIdent RuntimeLazyFactory+  runFn3 = Var nullAnn . Qualified (Just C.DataFunctionUncurried) . Ident $ C.runFn <> "3"+  strLit = Literal nullAnn . StringLiteral . mkString++  lazifyIdent = \case+    Ident txt -> InternalIdent $ Lazy txt+    _ -> internalError "Unexpected argument to lazifyIdent"++  makeForceCall :: Ann -> Ident -> Expr Ann+  makeForceCall (ss, _, _, _) ident+    -- We expect the functions produced by `runtimeLazy` to accept one+    -- argument: the line number on which this reference is made. The runtime+    -- code uses this number to generate a message that identifies where the+    -- evaluation looped.+    = App nullAnn (Var nullAnn . Qualified Nothing $ lazifyIdent ident)+    . Literal nullAnn . NumericLiteral . Left . toInteger . sourcePosLine+    $ spanStart ss++  fromRGI :: Ident -> RecursiveGroupItem (Expr Ann) -> ((Ann, Ident), Expr Ann)+  fromRGI i = \case+    EagerBinding a e -> ((a, i), e)+    -- We expect the `runtimeLazy` factory to accept three arguments: the+    -- identifier being initialized, the name of the module, and of course a+    -- thunk that actually contains the initialization code.+    LazyDefinition e -> ((nullAnn, lazifyIdent i), foldl1' (App nullAnn) [runFn3, runtimeLazy, strLit $ runIdent i, strLit $ runModuleName mn, Abs nullAnn UnusedIdent e])+    LazyBinding a -> ((a, i), makeForceCall a i)++  dropKeysAbove :: Int -> IM.MonoidalIntMap a -> IM.MonoidalIntMap a+  dropKeysAbove n = fst . IM.split (n + 1)++  coerceForce :: Maybe Int -> Ap Maybe (Max Int)+  coerceForce = coerce++  uncoerceForce :: Ap Maybe (Max Int) -> Maybe Int+  uncoerceForce = coerce
src/Language/PureScript/CoreFn/Traversals.hs view
@@ -6,6 +6,7 @@ import Prelude.Compat  import Control.Arrow (second, (***), (+++))+import Data.Bitraversable (bitraverse)  import Language.PureScript.AST.Literals import Language.PureScript.CoreFn.Binders@@ -43,3 +44,43 @@   handleLiteral i (ArrayLiteral ls) = ArrayLiteral (map i ls)   handleLiteral i (ObjectLiteral ls) = ObjectLiteral (map (fmap i) ls)   handleLiteral _ other = other++-- |+-- Apply the provided functions to the top level of AST nodes.+--+-- This function is useful as a building block for recursive functions, but+-- doesn't actually recurse itself.+--+traverseCoreFn+  :: forall f a+   . Applicative f+  => (Bind a -> f (Bind a))+  -> (Expr a -> f (Expr a))+  -> (Binder a -> f (Binder a))+  -> (CaseAlternative a -> f (CaseAlternative a))+  -> (Bind a -> f (Bind a), Expr a -> f (Expr a), Binder a -> f (Binder a), CaseAlternative a -> f (CaseAlternative a))+traverseCoreFn f g h i = (f', g', h', i')+  where+  f' (NonRec a name e) = NonRec a name <$> g e+  f' (Rec es) = Rec <$> traverse (traverse g) es++  g' (Literal ann e) = Literal ann <$> handleLiteral g e+  g' (Accessor ann prop e) = Accessor ann prop <$> g e+  g' (ObjectUpdate ann obj vs) = ObjectUpdate ann <$> g obj <*> traverse (traverse g) vs+  g' (Abs ann name e) = Abs ann name <$> g e+  g' (App ann v1 v2) = App ann <$> g v1 <*> g v2+  g' (Case ann vs alts) = Case ann <$> traverse g vs <*> traverse i alts+  g' (Let ann ds e) = Let ann <$> traverse f ds <*> g' e+  g' e = pure e++  h' (LiteralBinder a b) = LiteralBinder a <$> handleLiteral h b+  h' (NamedBinder a name b) = NamedBinder a name <$> h b+  h' (ConstructorBinder a q1 q2 bs) = ConstructorBinder a q1 q2 <$> traverse h bs+  h' b = pure b++  i' ca = CaseAlternative <$> traverse h (caseAlternativeBinders ca) <*> bitraverse (traverse $ bitraverse g g) g (caseAlternativeResult ca)++  handleLiteral withItem = \case+    ArrayLiteral ls -> ArrayLiteral <$> traverse withItem ls+    ObjectLiteral ls -> ObjectLiteral <$> traverse (traverse withItem) ls+    other -> pure other
src/Language/PureScript/CoreImp/AST.hs view
@@ -44,6 +44,13 @@   | ZeroFillShiftRight   deriving (Show, Eq) +-- | Data type for CoreImp comments, which can come from either the PureScript+-- source or internal transformations.+data CIComments+  = SourceComments [Comment]+  | PureAnnotation+  deriving (Show, Eq)+ -- | Data type for simplified JavaScript expressions data AST   = NumericLiteral (Maybe SourceSpan) (Either Integer Double)@@ -90,7 +97,7 @@   -- ^ Throw statement   | InstanceOf (Maybe SourceSpan) AST AST   -- ^ instanceof check-  | Comment (Maybe SourceSpan) [Comment] AST+  | Comment CIComments AST   -- ^ Commented JavaScript   deriving (Show, Eq) @@ -122,7 +129,7 @@   go (ReturnNoResult _) = ReturnNoResult ss   go (Throw _ js) = Throw ss js   go (InstanceOf _ j1 j2) = InstanceOf ss j1 j2-  go (Comment _ com j) = Comment ss com j+  go c@Comment{} = c  getSourceSpan :: AST -> Maybe SourceSpan getSourceSpan = go where@@ -149,7 +156,7 @@   go (ReturnNoResult ss) = ss   go (Throw ss _) = ss   go (InstanceOf ss _ _) = ss-  go (Comment ss _ _) = ss+  go (Comment _ _) = Nothing  everywhere :: (AST -> AST) -> AST -> AST everywhere f = go where@@ -171,7 +178,7 @@   go (Return ss js) = f (Return ss (go js))   go (Throw ss js) = f (Throw ss (go js))   go (InstanceOf ss j1 j2) = f (InstanceOf ss (go j1) (go j2))-  go (Comment ss com j) = f (Comment ss com (go j))+  go (Comment com j) = f (Comment com (go j))   go other = f other  everywhereTopDown :: (AST -> AST) -> AST -> AST@@ -197,7 +204,7 @@   go (Return ss j) = Return ss <$> f' j   go (Throw ss j) = Throw ss <$> f' j   go (InstanceOf ss j1 j2) = InstanceOf ss <$> f' j1 <*> f' j2-  go (Comment ss com j) = Comment ss com <$> f' j+  go (Comment com j) = Comment com <$> f' j   go other = f other  everything :: (r -> r -> r) -> (AST -> r) -> AST -> r@@ -220,5 +227,5 @@   go j@(Return _ j1) = f j <>. go j1   go j@(Throw _ j1) = f j <>. go j1   go j@(InstanceOf _ j1 j2) = f j <>. go j1 <>. go j2-  go j@(Comment _ _ j1) = f j <>. go j1+  go j@(Comment _ j1) = f j <>. go j1   go other = f other
+ src/Language/PureScript/CoreImp/Module.hs view
@@ -0,0 +1,19 @@+module Language.PureScript.CoreImp.Module where++import Protolude+import qualified Data.List.NonEmpty as NEL (NonEmpty)++import Language.PureScript.Comments+import Language.PureScript.CoreImp.AST+import Language.PureScript.PSString (PSString)++data Module = Module+  { modHeader :: [Comment]+  , modImports :: [Import]+  , modBody :: [AST]+  , modExports :: [Export]+  }++data Import = Import Text PSString++data Export = Export (NEL.NonEmpty Text) (Maybe PSString)
src/Language/PureScript/CoreImp/Optimizer/TCO.hs view
@@ -121,7 +121,7 @@       | otherwise = empty     allInTailPosition (Assignment _ _ js1)       = guard (countSelfReferences js1 == 0) $> S.empty-    allInTailPosition (Comment _ _ js1)+    allInTailPosition (Comment _ js1)       = allInTailPosition js1     allInTailPosition _       = empty
+ src/Language/PureScript/Crash.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE CPP #-}++module Language.PureScript.Crash where++import Prelude.Compat++import qualified GHC.Stack++-- | A compatibility wrapper for the @GHC.Stack.HasCallStack@ constraint.+#if __GLASGOW_HASKELL__ >= 800+type HasCallStack = GHC.Stack.HasCallStack+#elif MIN_VERSION_GLASGOW_HASKELL(7,10,2,0)+type HasCallStack = (?callStack :: GHC.Stack.CallStack)+#else+import GHC.Exts (Constraint)+-- CallStack wasn't present in GHC 7.10.1+type HasCallStack = (() :: Constraint)+#endif++-- | Exit with an error message and a crash report link.+internalError :: HasCallStack => String -> a+internalError =+  error+  . ("An internal error occurred during compilation: " ++)+  . (++ "\nPlease report this at https://github.com/purescript/purescript/issues")
src/Language/PureScript/Docs/Collect.hs view
@@ -9,9 +9,9 @@ import qualified Data.Aeson.BetterErrors as ABE import qualified Data.ByteString as BS import qualified Data.Map as Map-import Data.String (String) import qualified Data.Set as Set import qualified Data.Text as T+import qualified Data.Text.IO as TIO import System.FilePath ((</>)) import System.IO.UTF8 (readUTF8FileT, readUTF8FilesT) @@ -96,16 +96,12 @@       foreigns <- P.inferForeignModules filePathMap       let makeActions =             (P.buildMakeActions outputDir filePathMap foreigns False)-              { P.progress = liftIO . putStrLn . renderProgressMessage+              { P.progress = liftIO . TIO.hPutStr stdout . (<> "\n") . P.renderProgressMessage "Compiling documentation for "               }       P.make makeActions (map snd ms)   either throwError return result    where-  renderProgressMessage :: P.ProgressMessage -> String-  renderProgressMessage (P.CompilingModule mn) =-    "Compiling documentation for " ++ T.unpack (P.runModuleName mn)-   testOptions :: P.Options   testOptions = P.defaultOptions { P.optionsCodegenTargets = Set.singleton P.Docs } 
src/Language/PureScript/Docs/Convert.hs view
@@ -28,6 +28,7 @@ import qualified Language.PureScript.Sugar as P import qualified Language.PureScript.Types as P import qualified Language.PureScript.Constants.Prim as Prim+import Language.PureScript.Sugar (RebracketCaller(CalledByDocs))  -- | -- Convert a single module to a Docs.Module, making use of a pre-existing@@ -270,7 +271,7 @@       >>> P.desugarCasesModule       >=> P.desugarTypeDeclarationsModule       >=> fmap fst . runWriterT . flip evalStateT (env, mempty) . P.desugarImports-      >=> P.rebracketFiltered isInstanceDecl externs+      >=> P.rebracketFiltered CalledByDocs isInstanceDecl externs    isInstanceDecl P.TypeInstanceDeclaration {} = True   isInstanceDecl _ = False
src/Language/PureScript/Docs/Convert/Single.hs view
@@ -161,7 +161,7 @@ convertDeclaration (P.ValueDecl sa _ _ _ _) title =   -- If no explicit type declaration was provided, insert a wildcard, so that   -- the actual type will be added during type checking.-  basicDeclaration sa title (ValueDeclaration (P.TypeWildcard () Nothing))+  basicDeclaration sa title (ValueDeclaration (P.TypeWildcard () P.UnnamedWildcard)) convertDeclaration (P.ExternDeclaration sa _ ty) title =   basicDeclaration sa title (ValueDeclaration (ty $> ())) convertDeclaration (P.DataDeclaration sa dtype _ args ctors) title =
src/Language/PureScript/Docs/Prim.hs view
@@ -26,6 +26,7 @@   , primRowDocsModule   , primRowListDocsModule   , primSymbolDocsModule+  , primIntDocsModule   , primTypeErrorDocsModule   ] @@ -127,6 +128,19 @@   , modReExports = []   } +primIntDocsModule :: Module+primIntDocsModule = Module+  { modName = P.moduleNameFromString "Prim.Int"+  , modComments = Just "The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers."+  , modDeclarations =+      [ intAdd+      , intCompare+      , intMul+      , intToString+      ]+  , modReExports = []+  }+ primTypeErrorDocsModule :: Module primTypeErrorDocsModule = Module   { modName = P.moduleNameFromString "Prim.TypeError"@@ -195,6 +209,7 @@     P.primRowClasses <>     P.primRowListClasses <>     P.primSymbolClasses <>+    P.primIntClasses <>     P.primTypeErrorClasses   ) "Docs.Prim: No such Prim class: " @@ -518,6 +533,27 @@   , "head and tail or for combining a head and tail into a new symbol."   , "Requires the head to be a single character and the combined string"   , "cannot be empty."+  ]++intAdd :: Declaration+intAdd = primClassOf (P.primSubName "Int") "Add" $ T.unlines+  [ "Compiler solved type class for adding type-level `Int`s."+  ]++intCompare :: Declaration+intCompare = primClassOf (P.primSubName "Int") "Compare" $ T.unlines+  [ "Compiler solved type class for comparing two type-level `Int`s."+  , "Produces an `Ordering`."+  ]++intMul :: Declaration+intMul = primClassOf (P.primSubName "Int") "Mul" $ T.unlines+  [ "Compiler solved type class for multiplying type-level `Int`s."+  ]++intToString :: Declaration+intToString = primClassOf (P.primSubName "Int") "ToString" $ T.unlines+  [ "Compiler solved type class for converting a type-level `Int` into a type-level `String` (i.e. `Symbol`)."   ]  fail :: Declaration
src/Language/PureScript/Docs/RenderedCode/RenderType.hs view
@@ -15,7 +15,7 @@ import Prelude.Compat  import Data.Maybe (fromMaybe)-import Data.Text (Text)+import Data.Text (Text, pack) import Data.List (uncons)  import Control.Arrow ((<+>))@@ -55,6 +55,8 @@     Just (typeOp n)   match (PPTypeLevelString str) =     Just (syntax (prettyPrintString str))+  match (PPTypeLevelInt nat) =+    Just (syntax $ pack $ show nat)   match _ =     Nothing 
+ src/Language/PureScript/Environment.hs view
@@ -0,0 +1,652 @@+module Language.PureScript.Environment where++import Prelude.Compat+import Protolude (ordNub)++import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Codec.Serialise (Serialise)+import Data.Aeson ((.=), (.:))+import qualified Data.Aeson as A+import qualified Data.Map as M+import qualified Data.Set as S+import Data.Maybe (fromMaybe, mapMaybe)+import Data.Text (Text)+import qualified Data.Text as T+import Data.Tree (Tree, rootLabel)+import qualified Data.Graph as G+import Data.Foldable (toList)+import qualified Data.List.NonEmpty as NEL++import Language.PureScript.AST.SourcePos+import Language.PureScript.Crash+import Language.PureScript.Names+import Language.PureScript.Roles+import Language.PureScript.TypeClassDictionaries+import Language.PureScript.Types+import qualified Language.PureScript.Constants.Prim as C++-- | The @Environment@ defines all values and types which are currently in scope:+data Environment = Environment+  { names :: M.Map (Qualified Ident) (SourceType, NameKind, NameVisibility)+  -- ^ Values currently in scope+  , types :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+  -- ^ Type names currently in scope+  , dataConstructors :: M.Map (Qualified (ProperName 'ConstructorName)) (DataDeclType, ProperName 'TypeName, SourceType, [Ident])+  -- ^ Data constructors currently in scope, along with their associated type+  -- constructor name, argument types and return type.+  , typeSynonyms :: M.Map (Qualified (ProperName 'TypeName)) ([(Text, Maybe SourceType)], SourceType)+  -- ^ Type synonyms currently in scope+  , typeClassDictionaries :: M.Map (Maybe ModuleName) (M.Map (Qualified (ProperName 'ClassName)) (M.Map (Qualified Ident) (NEL.NonEmpty NamedDict)))+  -- ^ Available type class dictionaries. When looking up 'Nothing' in the+  -- outer map, this returns the map of type class dictionaries in local+  -- scope (ie dictionaries brought in by a constrained type).+  , typeClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+  -- ^ Type classes+  } deriving (Show, Generic)++instance NFData Environment++-- | Information about a type class+data TypeClassData = TypeClassData+  { typeClassArguments :: [(Text, Maybe SourceType)]+  -- ^ A list of type argument names, and their kinds, where kind annotations+  -- were provided.+  , typeClassMembers :: [(Ident, SourceType)]+  -- ^ A list of type class members and their types. Type arguments listed above+  -- are considered bound in these types.+  , typeClassSuperclasses :: [SourceConstraint]+  -- ^ A list of superclasses of this type class. Type arguments listed above+  -- are considered bound in the types appearing in these constraints.+  , typeClassDependencies :: [FunctionalDependency]+  -- ^ A list of functional dependencies for the type arguments of this class.+  , typeClassDeterminedArguments :: S.Set Int+  -- ^ A set of indexes of type argument that are fully determined by other+  -- arguments via functional dependencies. This can be computed from both+  -- typeClassArguments and typeClassDependencies.+  , typeClassCoveringSets :: S.Set (S.Set Int)+  -- ^ A sets of arguments that can be used to infer all other arguments.+  , typeClassIsEmpty :: Bool+  -- ^ Whether or not dictionaries for this type class are necessarily empty.+  } deriving (Show, Generic)++instance NFData TypeClassData++-- | A functional dependency indicates a relationship between two sets of+-- type arguments in a class declaration.+data FunctionalDependency = FunctionalDependency+  { fdDeterminers :: [Int]+  -- ^ the type arguments which determine the determined type arguments+  , fdDetermined  :: [Int]+  -- ^ the determined type arguments+  } deriving (Show, Generic)++instance NFData FunctionalDependency+instance Serialise FunctionalDependency++instance A.FromJSON FunctionalDependency where+  parseJSON = A.withObject "FunctionalDependency" $ \o ->+    FunctionalDependency+      <$> o .: "determiners"+      <*> o .: "determined"++instance A.ToJSON FunctionalDependency where+  toJSON FunctionalDependency{..} =+    A.object [ "determiners" .= fdDeterminers+             , "determined" .= fdDetermined+             ]++-- | The initial environment with no values and only the default javascript types defined+initEnvironment :: Environment+initEnvironment = Environment M.empty allPrimTypes M.empty M.empty M.empty allPrimClasses++-- | A constructor for TypeClassData that computes which type class arguments are fully determined+-- and argument covering sets.+-- Fully determined means that this argument cannot be used when selecting a type class instance.+-- A covering set is a minimal collection of arguments that can be used to find an instance and+-- therefore determine all other type arguments.+--+-- An example of the difference between determined and fully determined would be with the class:+-- ```class C a b c | a -> b, b -> a, b -> c```+-- In this case, `a` must differ when `b` differs, and vice versa - each is determined by the other.+-- Both `a` and `b` can be used in selecting a type class instance. However, `c` cannot - it is+-- fully determined by `a` and `b`.+--+-- Define a graph of type class arguments with edges being fundep determiners to determined. Each+-- argument also has a self looping edge.+-- An argument is fully determined if doesn't appear at the start of a path of strongly connected components.+-- An argument is not fully determined otherwise.+--+-- The way we compute this is by saying: an argument X is fully determined if there are arguments that+-- determine X that X does not determine. This is the same thing: everything X determines includes everything+-- in its SCC, and everything determining X is either before it in an SCC path, or in the same SCC.+makeTypeClassData+  :: [(Text, Maybe SourceType)]+  -> [(Ident, SourceType)]+  -> [SourceConstraint]+  -> [FunctionalDependency]+  -> Bool+  -> TypeClassData+makeTypeClassData args m s deps = TypeClassData args m s deps determinedArgs coveringSets+  where+    argumentIndices = [0 .. length args - 1]++    -- each argument determines themselves+    identities = (\i -> (i, [i])) <$> argumentIndices++    -- list all the edges in the graph: for each fundep an edge exists for each determiner to each determined+    contributingDeps = M.fromListWith (++) $ identities ++ do+      fd <- deps+      src <- fdDeterminers fd+      (src, fdDetermined fd) : map (, []) (fdDetermined fd)++    -- build a graph of which arguments determine other arguments+    (depGraph, fromVertex, fromKey) = G.graphFromEdges ((\(n, v) -> (n, n, ordNub v)) <$> M.toList contributingDeps)++    -- do there exist any arguments that contribute to `arg` that `arg` doesn't contribute to+    isFunDepDetermined :: Int -> Bool+    isFunDepDetermined arg = case fromKey arg of+      Nothing -> internalError "Unknown argument index in makeTypeClassData"+      Just v -> let contributesToVar = G.reachable (G.transposeG depGraph) v+                    varContributesTo = G.reachable depGraph v+                in any (`notElem` varContributesTo) contributesToVar++    -- find all the arguments that are determined+    determinedArgs :: S.Set Int+    determinedArgs = S.fromList $ filter isFunDepDetermined argumentIndices++    argFromVertex :: G.Vertex -> Int+    argFromVertex index = let (_, arg, _) = fromVertex index in arg++    isVertexDetermined :: G.Vertex -> Bool+    isVertexDetermined = isFunDepDetermined . argFromVertex++    -- from an scc find the non-determined args+    sccNonDetermined :: Tree G.Vertex -> Maybe [Int]+    sccNonDetermined tree+      -- if any arg in an scc is determined then all of them are+      | isVertexDetermined (rootLabel tree) = Nothing+      | otherwise = Just (argFromVertex <$> toList tree)++    -- find the covering sets+    coveringSets :: S.Set (S.Set Int)+    coveringSets = let funDepSets = sequence (mapMaybe sccNonDetermined (G.scc depGraph))+                   in S.fromList (S.fromList <$> funDepSets)++-- | The visibility of a name in scope+data NameVisibility+  = Undefined+  -- ^ The name is defined in the current binding group, but is not visible+  | Defined+  -- ^ The name is defined in the another binding group, or has been made visible by a function binder+  deriving (Show, Eq, Generic)++instance NFData NameVisibility+instance Serialise NameVisibility++-- | A flag for whether a name is for an private or public value - only public values will be+-- included in a generated externs file.+data NameKind+  = Private+  -- ^ A private value introduced as an artifact of code generation (class instances, class member+  -- accessors, etc.)+  | Public+  -- ^ A public value for a module member or foreign import declaration+  | External+  -- ^ A name for member introduced by foreign import+  deriving (Show, Eq, Generic)++instance NFData NameKind+instance Serialise NameKind++-- | The kinds of a type+data TypeKind+  = DataType DataDeclType [(Text, Maybe SourceType, Role)] [(ProperName 'ConstructorName, [SourceType])]+  -- ^ Data type+  | TypeSynonym+  -- ^ Type synonym+  | ExternData [Role]+  -- ^ Foreign data+  | LocalTypeVariable+  -- ^ A local type variable+  | ScopedTypeVar+  -- ^ A scoped type variable+  deriving (Show, Eq, Generic)++instance NFData TypeKind+instance Serialise TypeKind++-- | The type ('data' or 'newtype') of a data type declaration+data DataDeclType+  = Data+  -- ^ A standard data constructor+  | Newtype+  -- ^ A newtype constructor+  deriving (Show, Eq, Ord, Generic)++instance NFData DataDeclType+instance Serialise DataDeclType++showDataDeclType :: DataDeclType -> Text+showDataDeclType Data = "data"+showDataDeclType Newtype = "newtype"++instance A.ToJSON DataDeclType where+  toJSON = A.toJSON . showDataDeclType++instance A.FromJSON DataDeclType where+  parseJSON = A.withText "DataDeclType" $ \case+    "data" -> return Data+    "newtype" -> return Newtype+    other -> fail $ "invalid type: '" ++ T.unpack other ++ "'"++-- | Construct a ProperName in the Prim module+primName :: Text -> Qualified (ProperName a)+primName = Qualified (Just C.Prim) . ProperName++-- | Construct a 'ProperName' in the @Prim.NAME@ module.+primSubName :: Text -> Text -> Qualified (ProperName a)+primSubName sub =+  Qualified (Just $ ModuleName $ C.prim <> "." <> sub) . ProperName++primKind :: Text -> SourceType+primKind = primTy++primSubKind :: Text -> Text -> SourceType+primSubKind sub = TypeConstructor nullSourceAnn . primSubName sub++-- | Kind of ground types+kindType :: SourceType+kindType = primKind C.typ++kindConstraint :: SourceType+kindConstraint = primKind C.constraint++kindSymbol :: SourceType+kindSymbol = primKind C.symbol++kindDoc :: SourceType+kindDoc = primSubKind C.typeError C.doc++kindOrdering :: SourceType+kindOrdering = primSubKind C.moduleOrdering C.kindOrdering++kindRowList :: SourceType -> SourceType+kindRowList = TypeApp nullSourceAnn (primSubKind C.moduleRowList C.kindRowList)++kindRow :: SourceType -> SourceType+kindRow = TypeApp nullSourceAnn (primKind C.row)++kindOfREmpty :: SourceType+kindOfREmpty = tyForall "k" kindType (kindRow (tyVar "k"))++-- | Construct a type in the Prim module+primTy :: Text -> SourceType+primTy = TypeConstructor nullSourceAnn . primName++-- | Type constructor for functions+tyFunction :: SourceType+tyFunction = primTy "Function"++-- | Type constructor for strings+tyString :: SourceType+tyString = primTy "String"++-- | Type constructor for strings+tyChar :: SourceType+tyChar = primTy "Char"++-- | Type constructor for numbers+tyNumber :: SourceType+tyNumber = primTy "Number"++-- | Type constructor for integers+tyInt :: SourceType+tyInt = primTy "Int"++-- | Type constructor for booleans+tyBoolean :: SourceType+tyBoolean = primTy "Boolean"++-- | Type constructor for arrays+tyArray :: SourceType+tyArray = primTy "Array"++-- | Type constructor for records+tyRecord :: SourceType+tyRecord = primTy "Record"++tyVar :: Text -> SourceType+tyVar = TypeVar nullSourceAnn++tyForall :: Text -> SourceType -> SourceType -> SourceType+tyForall var k ty = ForAll nullSourceAnn var (Just k) ty Nothing++-- | Smart constructor for function types+function :: SourceType -> SourceType -> SourceType+function = TypeApp nullSourceAnn . TypeApp nullSourceAnn tyFunction++-- To make reading the kind signatures below easier+(-:>) :: SourceType -> SourceType -> SourceType+(-:>) = function+infixr 4 -:>++primClass :: Qualified (ProperName 'TypeName) -> (SourceType -> SourceType) -> [(Qualified (ProperName 'TypeName), (SourceType, TypeKind))]+primClass name mkKind =+  [ let k = mkKind kindConstraint+    in (name, (k, ExternData (nominalRolesForKind k)))+  , let k = mkKind kindType+    in (dictTypeName <$> name, (k, TypeSynonym))+  ]++-- | The primitive types in the external environment with their+-- associated kinds. There are also pseudo `Fail`, `Warn`, and `Partial` types+-- that correspond to the classes with the same names.+primTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primTypes =+  M.fromList+    [ (primName "Type",             (kindType, ExternData []))+    , (primName "Constraint",       (kindType, ExternData []))+    , (primName "Symbol",           (kindType, ExternData []))+    , (primName "Row",              (kindType -:> kindType, ExternData [Phantom]))+    , (primName "Function",         (kindType -:> kindType -:> kindType, ExternData [Representational, Representational]))+    , (primName "Array",            (kindType -:> kindType, ExternData [Representational]))+    , (primName "Record",           (kindRow kindType -:> kindType, ExternData [Representational]))+    , (primName "String",           (kindType, ExternData []))+    , (primName "Char",             (kindType, ExternData []))+    , (primName "Number",           (kindType, ExternData []))+    , (primName "Int",              (kindType, ExternData []))+    , (primName "Boolean",          (kindType, ExternData []))+    , (primName "Partial",          (kindConstraint, ExternData []))+    ]++-- | This 'Map' contains all of the prim types from all Prim modules.+allPrimTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+allPrimTypes = M.unions+  [ primTypes+  , primBooleanTypes+  , primCoerceTypes+  , primOrderingTypes+  , primRowTypes+  , primRowListTypes+  , primSymbolTypes+  , primIntTypes+  , primTypeErrorTypes+  ]++primBooleanTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primBooleanTypes =+  M.fromList+    [ (primSubName C.moduleBoolean "True", (tyBoolean, ExternData []))+    , (primSubName C.moduleBoolean "False", (tyBoolean, ExternData []))+    ]++primCoerceTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primCoerceTypes =+  M.fromList $ mconcat+    [ primClass (primSubName C.moduleCoerce "Coercible") (\kind -> tyForall "k" kindType $ tyVar "k" -:> tyVar "k" -:> kind)+    ]++primOrderingTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primOrderingTypes =+  M.fromList+    [ (primSubName C.moduleOrdering "Ordering", (kindType, ExternData []))+    , (primSubName C.moduleOrdering "LT", (kindOrdering, ExternData []))+    , (primSubName C.moduleOrdering "EQ", (kindOrdering, ExternData []))+    , (primSubName C.moduleOrdering "GT", (kindOrdering, ExternData []))+    ]++primRowTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primRowTypes =+  M.fromList $ mconcat+    [ primClass (primSubName C.moduleRow "Union") (\kind -> tyForall "k" kindType $ kindRow (tyVar "k") -:> kindRow (tyVar "k") -:> kindRow (tyVar "k") -:> kind)+    , primClass (primSubName C.moduleRow "Nub")   (\kind -> tyForall "k" kindType $ kindRow (tyVar "k") -:> kindRow (tyVar "k") -:> kind)+    , primClass (primSubName C.moduleRow "Lacks") (\kind -> tyForall "k" kindType $ kindSymbol -:> kindRow (tyVar "k") -:> kind)+    , primClass (primSubName C.moduleRow "Cons")  (\kind -> tyForall "k" kindType $ kindSymbol -:> tyVar "k" -:> kindRow (tyVar "k") -:> kindRow (tyVar "k") -:> kind)+    ]++primRowListTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primRowListTypes =+  M.fromList $+    [ (primSubName C.moduleRowList "RowList", (kindType -:> kindType, ExternData [Phantom]))+    , (primSubName C.moduleRowList "Cons", (tyForall "k" kindType $ kindSymbol -:> tyVar "k" -:> kindRowList (tyVar "k") -:> kindRowList (tyVar "k"), ExternData [Phantom, Phantom, Phantom]))+    , (primSubName C.moduleRowList "Nil", (tyForall "k" kindType $ kindRowList (tyVar "k"), ExternData []))+    ] <> mconcat+    [ primClass (primSubName C.moduleRowList "RowToList")  (\kind -> tyForall "k" kindType $ kindRow (tyVar "k") -:> kindRowList (tyVar "k") -:> kind)+    ]++primSymbolTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primSymbolTypes =+  M.fromList $ mconcat+    [ primClass (primSubName C.moduleSymbol "Append")  (\kind -> kindSymbol -:> kindSymbol -:> kindSymbol -:> kind)+    , primClass (primSubName C.moduleSymbol "Compare") (\kind -> kindSymbol -:> kindSymbol -:> kindOrdering -:> kind)+    , primClass (primSubName C.moduleSymbol "Cons")    (\kind -> kindSymbol -:> kindSymbol -:> kindSymbol -:> kind)+    ]++primIntTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primIntTypes =+  M.fromList $ mconcat+    [ primClass (primSubName C.moduleInt "Add")     (\kind -> tyInt -:> tyInt -:> tyInt -:> kind)+    , primClass (primSubName C.moduleInt "Compare") (\kind -> tyInt -:> tyInt -:> kindOrdering -:> kind)+    , primClass (primSubName C.moduleInt "Mul")     (\kind -> tyInt -:> tyInt -:> tyInt -:> kind)+    , primClass (primSubName C.moduleInt "ToString") (\kind -> tyInt -:> kindSymbol -:> kind)+    ]++primTypeErrorTypes :: M.Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind)+primTypeErrorTypes =+  M.fromList $+    [ (primSubName C.typeError "Doc", (kindType, ExternData []))+    , (primSubName C.typeError "Fail", (kindDoc -:> kindConstraint, ExternData [Nominal]))+    , (primSubName C.typeError "Warn", (kindDoc -:> kindConstraint, ExternData [Nominal]))+    , (primSubName C.typeError "Text", (kindSymbol -:> kindDoc, ExternData [Phantom]))+    , (primSubName C.typeError "Quote", (tyForall "k" kindType $ tyVar "k" -:> kindDoc, ExternData [Phantom]))+    , (primSubName C.typeError "QuoteLabel", (kindSymbol -:> kindDoc, ExternData [Phantom]))+    , (primSubName C.typeError "Beside", (kindDoc -:> kindDoc -:> kindDoc, ExternData [Phantom, Phantom]))+    , (primSubName C.typeError "Above", (kindDoc -:> kindDoc -:> kindDoc, ExternData [Phantom, Phantom]))+    ] <> mconcat+    [ primClass (primSubName C.typeError "Fail") (\kind -> kindDoc -:> kind)+    , primClass (primSubName C.typeError "Warn") (\kind -> kindDoc -:> kind)+    ]++-- | The primitive class map. This just contains the `Partial` class.+-- `Partial` is used as a kind of magic constraint for partial functions.+primClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primClasses =+  M.fromList+    [ (primName "Partial", makeTypeClassData [] [] [] [] True)+    ]++-- | This contains all of the type classes from all Prim modules.+allPrimClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+allPrimClasses = M.unions+  [ primClasses+  , primCoerceClasses+  , primRowClasses+  , primRowListClasses+  , primSymbolClasses+  , primIntClasses+  , primTypeErrorClasses+  ]++primCoerceClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primCoerceClasses =+  M.fromList+    -- class Coercible (a :: k) (b :: k)+    [ (primSubName C.moduleCoerce "Coercible", makeTypeClassData+        [ ("a", Just (tyVar "k"))+        , ("b", Just (tyVar "k"))+        ] [] [] [] True)+    ]++primRowClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primRowClasses =+  M.fromList+    -- class Union (left :: Row k) (right :: Row k) (union :: Row k) | left right -> union, right union -> left, union left -> right+    [ (primSubName C.moduleRow "Union", makeTypeClassData+        [ ("left", Just (kindRow (tyVar "k")))+        , ("right", Just (kindRow (tyVar "k")))+        , ("union", Just (kindRow (tyVar "k")))+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        , FunctionalDependency [1, 2] [0]+        , FunctionalDependency [2, 0] [1]+        ] True)++    -- class Nub (original :: Row k) (nubbed :: Row k) | original -> nubbed+    , (primSubName C.moduleRow "Nub", makeTypeClassData+        [ ("original", Just (kindRow (tyVar "k")))+        , ("nubbed", Just (kindRow (tyVar "k")))+        ] [] []+        [ FunctionalDependency [0] [1]+        ] True)++    -- class Lacks (label :: Symbol) (row :: Row k)+    , (primSubName C.moduleRow "Lacks", makeTypeClassData+        [ ("label", Just kindSymbol)+        , ("row", Just (kindRow (tyVar "k")))+        ] [] [] [] True)++    -- class RowCons (label :: Symbol) (a :: k) (tail :: Row k) (row :: Row k) | label tail a -> row, label row -> tail a+    , (primSubName C.moduleRow "Cons", makeTypeClassData+        [ ("label", Just kindSymbol)+        , ("a", Just (tyVar "k"))+        , ("tail", Just (kindRow (tyVar "k")))+        , ("row", Just (kindRow (tyVar "k")))+        ] [] []+        [ FunctionalDependency [0, 1, 2] [3]+        , FunctionalDependency [0, 3] [1, 2]+        ] True)+    ]++primRowListClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primRowListClasses =+  M.fromList+    -- class RowToList (row :: Row k) (list :: RowList k) | row -> list+    [ (primSubName C.moduleRowList "RowToList", makeTypeClassData+        [ ("row", Just (kindRow (tyVar "k")))+        , ("list", Just (kindRowList (tyVar "k")))+        ] [] []+        [ FunctionalDependency [0] [1]+        ] True)+    ]++primSymbolClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primSymbolClasses =+  M.fromList+    -- class Append (left :: Symbol) (right :: Symbol) (appended :: Symbol) | left right -> appended, right appended -> left, appended left -> right+    [ (primSubName C.moduleSymbol "Append", makeTypeClassData+        [ ("left", Just kindSymbol)+        , ("right", Just kindSymbol)+        , ("appended", Just kindSymbol)+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        , FunctionalDependency [1, 2] [0]+        , FunctionalDependency [2, 0] [1]+        ] True)++    -- class Compare (left :: Symbol) (right :: Symbol) (ordering :: Ordering) | left right -> ordering+    , (primSubName C.moduleSymbol "Compare", makeTypeClassData+        [ ("left", Just kindSymbol)+        , ("right", Just kindSymbol)+        , ("ordering", Just kindOrdering)+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        ] True)++    -- class Cons (head :: Symbol) (tail :: Symbol) (symbol :: Symbol) | head tail -> symbol, symbol -> head tail+    , (primSubName C.moduleSymbol "Cons", makeTypeClassData+        [ ("head", Just kindSymbol)+        , ("tail", Just kindSymbol)+        , ("symbol", Just kindSymbol)+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        , FunctionalDependency [2] [0, 1]+        ] True)+    ]++primIntClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primIntClasses =+  M.fromList+    -- class Add (left :: Int) (right :: Int) (sum :: Int) | left right -> sum, left sum -> right, right sum -> left+    [ (primSubName C.moduleInt "Add", makeTypeClassData+        [ ("left", Just tyInt)+        , ("right", Just tyInt)+        , ("sum", Just tyInt)+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        , FunctionalDependency [0, 2] [1]+        , FunctionalDependency [1, 2] [0]+        ] True)++    -- class Compare (left :: Int) (right :: Int) (ordering :: Ordering) | left right -> ordering+    , (primSubName C.moduleInt "Compare", makeTypeClassData+        [ ("left", Just tyInt)+        , ("right", Just kindSymbol)+        , ("ordering", Just kindSymbol)+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        ] True)++    -- class Mul (left :: Int) (right :: Int) (product :: Int) | left right -> product+    , (primSubName C.moduleInt "Mul", makeTypeClassData+        [ ("left", Just tyInt)+        , ("right", Just tyInt)+        , ("product", Just tyInt)+        ] [] []+        [ FunctionalDependency [0, 1] [2]+        ] True)++    -- class ToString (int :: Int) (string :: Symbol) | int -> string+    , (primSubName C.moduleInt "ToString", makeTypeClassData+        [ ("int", Just tyInt)+        , ("string", Just kindSymbol)+        ] [] []+        [ FunctionalDependency [0] [1]+        ] True)+    ]++primTypeErrorClasses :: M.Map (Qualified (ProperName 'ClassName)) TypeClassData+primTypeErrorClasses =+  M.fromList+    -- class Fail (message :: Symbol)+    [ (primSubName C.typeError "Fail", makeTypeClassData+        [("message", Just kindDoc)] [] [] [] True)++    -- class Warn (message :: Symbol)+    , (primSubName C.typeError "Warn", makeTypeClassData+        [("message", Just kindDoc)] [] [] [] True)+    ]++-- | Finds information about data constructors from the current environment.+lookupConstructor :: Environment -> Qualified (ProperName 'ConstructorName) -> (DataDeclType, ProperName 'TypeName, SourceType, [Ident])+lookupConstructor env ctor =+  fromMaybe (internalError "Data constructor not found") $ ctor `M.lookup` dataConstructors env++-- | Finds information about values from the current environment.+lookupValue :: Environment -> Qualified Ident -> Maybe (SourceType, NameKind, NameVisibility)+lookupValue env ident = ident `M.lookup` names env++dictTypeName' :: Text -> Text+dictTypeName' = (<> "$Dict")++dictTypeName :: ProperName a -> ProperName a+dictTypeName = ProperName . dictTypeName' . runProperName++isDictTypeName :: ProperName a -> Bool+isDictTypeName = T.isSuffixOf "$Dict" . runProperName++-- |+-- Given the kind of a type, generate a list @Nominal@ roles. This is used for+-- opaque foreign types as well as type classes.+nominalRolesForKind :: Type a -> [Role]+nominalRolesForKind k = replicate (kindArity k) Nominal++kindArity :: Type a -> Int+kindArity = length . fst . unapplyKinds++unapplyKinds :: Type a -> ([Type a], Type a)+unapplyKinds = go [] where+  go kinds (TypeApp _ (TypeApp _ fn k1) k2)+    | eqType fn tyFunction = go (k1 : kinds) k2+  go kinds (ForAll _ _ _ k _) = go kinds k+  go kinds k = (reverse kinds, k)
src/Language/PureScript/Errors.hs view
@@ -65,6 +65,9 @@   | UnusedFFIImplementations ModuleName [Ident]   | InvalidFFIIdentifier ModuleName Text   | DeprecatedFFIPrime ModuleName Text+  | DeprecatedFFICommonJSModule ModuleName FilePath+  | UnsupportedFFICommonJSExports ModuleName [Text]+  | UnsupportedFFICommonJSImports ModuleName [Text]   | FileIOError Text IOError -- ^ A description of what we were trying to do, and the error which occurred   | InfiniteType SourceType   | InfiniteKind SourceType@@ -105,8 +108,9 @@   | OverlappingInstances (Qualified (ProperName 'ClassName)) [SourceType] [Qualified (Either SourceType Ident)]   | NoInstanceFound       SourceConstraint -- ^ constraint that could not be solved+      [Qualified (Either SourceType Ident)] -- ^ a list of instances that stopped further progress in instance chains due to ambiguity       Bool -- ^ whether eliminating unknowns with annotations might help-  | AmbiguousTypeVariables SourceType [Int]+  | AmbiguousTypeVariables SourceType [(Text, Int)]   | UnknownClass (Qualified (ProperName 'ClassName))   | PossiblyInfiniteInstance (Qualified (ProperName 'ClassName)) [SourceType]   | PossiblyInfiniteCoercibleInstance@@ -239,6 +243,9 @@   UnusedFFIImplementations{} -> "UnusedFFIImplementations"   InvalidFFIIdentifier{} -> "InvalidFFIIdentifier"   DeprecatedFFIPrime{} -> "DeprecatedFFIPrime"+  DeprecatedFFICommonJSModule {} -> "DeprecatedFFICommonJSModule"+  UnsupportedFFICommonJSExports {} -> "UnsupportedFFICommonJSExports"+  UnsupportedFFICommonJSImports {} -> "UnsupportedFFICommonJSImports"   FileIOError{} -> "FileIOError"   InfiniteType{} -> "InfiniteType"   InfiniteKind{} -> "InfiniteKind"@@ -453,8 +460,8 @@   gSimple (ConstrainedTypeUnified t1 t2) = ConstrainedTypeUnified <$> f t1 <*> f t2   gSimple (ExprDoesNotHaveType e t) = ExprDoesNotHaveType e <$> f t   gSimple (InvalidInstanceHead t) = InvalidInstanceHead <$> f t-  gSimple (NoInstanceFound con unks) = NoInstanceFound <$> overConstraintArgs (traverse f) con <*> pure unks-  gSimple (AmbiguousTypeVariables t us) = AmbiguousTypeVariables <$> f t <*> pure us+  gSimple (NoInstanceFound con ambig unks) = NoInstanceFound <$> overConstraintArgs (traverse f) con <*> pure ambig <*> pure unks+  gSimple (AmbiguousTypeVariables t uis) = AmbiguousTypeVariables <$> f t <*> pure uis   gSimple (OverlappingInstances cl ts insts) = OverlappingInstances cl <$> traverse f ts <*> traverse (traverse $ bitraverse f pure) insts   gSimple (PossiblyInfiniteInstance cl ts) = PossiblyInfiniteInstance cl <$> traverse f ts   gSimple (CannotDerive cl ts) = CannotDerive cl <$> traverse f ts@@ -513,9 +520,9 @@                      | otherwise = "Row " <> kind             suggest sugg           CST.WarnDeprecatedForeignKindSyntax -> suggest $ "data " <> CST.printTokens (drop 3 toks)-          CST.WarnDeprecatedConstraintInForeignImportSyntax -> Nothing           CST.WarnDeprecatedKindImportSyntax -> suggest $ CST.printTokens $ drop 1 toks           CST.WarnDeprecatedKindExportSyntax -> suggest $ CST.printTokens $ drop 1 toks+          CST.WarnDeprecatedCaseOfOffsideSyntax -> Nothing       _ -> Nothing   where     emptySuggestion = Just $ ErrorSuggestion ""@@ -701,9 +708,22 @@       paras [ line $ "In the FFI module for " <> markCode (runModuleName mn) <> ":"             , indent . paras $                 [ line $ "The identifier " <> markCode ident <> " contains a prime (" <> markCode "'" <> ")."-                , line "Primes in identifiers exported from FFI modules are deprecated and won’t be supported in the future."+                , line "Primes are not allowed in identifiers exported from FFI modules."                 ]             ]+    renderSimpleErrorMessage (DeprecatedFFICommonJSModule mn path) =+      paras [ line $ "A CommonJS foreign module implementation was provided for module " <> markCode (runModuleName mn) <> ": "+            , indent . lineS $ path+            , line "CommonJS foreign modules are no longer supported. Use native JavaScript/ECMAScript module syntax instead."+            ]+    renderSimpleErrorMessage (UnsupportedFFICommonJSExports mn idents) =+      paras [ line $ "The following CommonJS exports are not supported in the ES foreign module for module " <> markCode (runModuleName mn) <> ": "+            , indent . paras $ map line idents+            ]+    renderSimpleErrorMessage (UnsupportedFFICommonJSImports mn mids) =+      paras [ line $ "The following CommonJS imports are not supported in the ES foreign module for module " <> markCode (runModuleName mn) <> ": "+            , indent . paras $ map line mids+            ]     renderSimpleErrorMessage InvalidDoBind =       line "The last statement in a 'do' block must be an expression, but this block ends with a binder."     renderSimpleErrorMessage InvalidDoLet =@@ -731,7 +751,7 @@     renderSimpleErrorMessage (RedefinedIdent name) =       line $ "The value " <> markCode (showIdent name) <> " has been defined multiple times"     renderSimpleErrorMessage (UnknownName name@(Qualified Nothing (IdentName (Ident i)))) | i `elem` [ C.bind, C.discard ] =-      line $ "Unknown " <> printName name <> ". You're probably using do-notation, which the compiler replaces with calls to the " <> markCode i <> " function. Please import " <> markCode i <> " from module " <> markCode "Prelude"+      line $ "Unknown " <> printName name <> ". You're probably using do-notation, which the compiler replaces with calls to the " <> markCode "bind" <> " and " <> markCode "discard" <> " functions. Please import " <> markCode i <> " from module " <> markCode "Prelude"     renderSimpleErrorMessage (UnknownName name@(Qualified Nothing (IdentName (Ident i)))) | i == C.negate =       line $ "Unknown " <> printName name <> ". You're probably using numeric negation (the unary " <> markCode "-" <> " operator), which the compiler replaces with calls to the " <> markCode i <> " function. Please import " <> markCode i <> " from module " <> markCode "Prelude"     renderSimpleErrorMessage (UnknownName name) =@@ -860,14 +880,14 @@             , markCodeBox $ indent $ line (showQualified runProperName nm)             , line "because the class was not in scope. Perhaps it was not exported."             ]-    renderSimpleErrorMessage (NoInstanceFound (Constraint _ C.Fail _ [ ty ] _) _) | Just box <- toTypelevelString ty =+    renderSimpleErrorMessage (NoInstanceFound (Constraint _ C.Fail _ [ ty ] _) _ _) | Just box <- toTypelevelString ty =       paras [ line "A custom type error occurred while solving type class constraints:"             , indent box             ]     renderSimpleErrorMessage (NoInstanceFound (Constraint _ C.Partial                                                           _                                                           _-                                                          (Just (PartialConstraintData bs b))) _) =+                                                          (Just (PartialConstraintData bs b))) _ _) =       paras [ line "A case expression could not be determined to cover all inputs."             , line "The following additional cases are required to cover all inputs:"             , indent $ paras $@@ -876,30 +896,38 @@                   : [line "..." | not b]             , line "Alternatively, add a Partial constraint to the type of the enclosing value."             ]-    renderSimpleErrorMessage (NoInstanceFound (Constraint _ C.Discard _ [ty] _) _) =+    renderSimpleErrorMessage (NoInstanceFound (Constraint _ C.Discard _ [ty] _) _ _) =       paras [ line "A result of type"             , markCodeBox $ indent $ prettyType ty             , line "was implicitly discarded in a do notation block."             , line ("You can use " <> markCode "_ <- ..." <> " to explicitly discard the result.")             ]-    renderSimpleErrorMessage (NoInstanceFound (Constraint _ nm _ ts _) unks) =+    renderSimpleErrorMessage (NoInstanceFound (Constraint _ nm _ ts _) ambiguous unks) =       paras [ line "No type class instance was found for"             , markCodeBox $ indent $ Box.hsep 1 Box.left                 [ line (showQualified runProperName nm)                 , Box.vcat Box.left (map prettyTypeAtom ts)                 ]+            , paras $ let useMessage msg =+                            [ line msg+                            , indent $ paras (map prettyInstanceName ambiguous)+                            ]+                      in case ambiguous of+                        [] -> []+                        [_] -> useMessage "The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:"+                        _ -> useMessage "The following instances partially overlap the above constraint, which means the rest of their instance chains will not be considered:"             , paras [ line "The instance head contains unknown type variables. Consider adding a type annotation."                     | unks                     ]             ]-    renderSimpleErrorMessage (AmbiguousTypeVariables t us) =+    renderSimpleErrorMessage (AmbiguousTypeVariables t uis) =       paras [ line "The inferred type"             , markCodeBox $ indent $ prettyType t             , line "has type variables which are not determined by those mentioned in the body of the type:"             , indent $ Box.hsep 1 Box.left               [ Box.vcat Box.left-                [ line $ markCode ("t" <> T.pack (show u)) <> " could not be determined"-                | u <- us ]+                [ line $ markCode (u <> T.pack (show i)) <> " could not be determined"+                | (u, i) <- uis ]               ]             , line "Consider adding a type annotation."             ]@@ -1647,7 +1675,7 @@       where       isUnifyHint ErrorUnifyingTypes{} = True       isUnifyHint _ = False-    stripRedundantHints (NoInstanceFound (Constraint _ C.Coercible _ args _) _) = filter (not . isSolverHint)+    stripRedundantHints (NoInstanceFound (Constraint _ C.Coercible _ args _) _ _) = filter (not . isSolverHint)       where       isSolverHint (ErrorSolvingConstraint (Constraint _ C.Coercible _ args' _)) = args == args'       isSolverHint _ = False@@ -1902,9 +1930,6 @@  positionedError :: SourceSpan -> ErrorMessageHint positionedError = PositionedError . pure--filterErrors :: (ErrorMessage -> Bool) -> MultipleErrors -> MultipleErrors-filterErrors f = MultipleErrors . filter f . runMultipleErrors  -- | Runs a computation listening for warnings and then escalating any warnings -- that match the predicate to error status.
src/Language/PureScript/Ide/Prim.hs view
@@ -29,6 +29,9 @@   , ( C.PrimSymbol     , mconcat [primSymbolTypes, primSymbolClasses]     )+  , ( C.PrimInt+    , mconcat [primIntTypes, primIntClasses]+    )   , ( C.PrimTypeError     , mconcat [primTypeErrorTypes, primTypeErrorClasses]     )@@ -55,10 +58,12 @@     primRowTypes = annType (removeClasses PEnv.primRowTypes PEnv.primRowClasses)     primRowListTypes = annType (removeClasses PEnv.primRowListTypes PEnv.primRowListClasses)     primSymbolTypes = annType (removeClasses PEnv.primSymbolTypes PEnv.primSymbolClasses)+    primIntTypes = annType (removeClasses PEnv.primIntTypes PEnv.primIntClasses)     primTypeErrorTypes = annType (removeClasses PEnv.primTypeErrorTypes PEnv.primTypeErrorClasses)      primClasses = annClass PEnv.primClasses     primRowClasses = annClass PEnv.primRowClasses     primRowListClasses = annClass PEnv.primRowListClasses     primSymbolClasses = annClass PEnv.primSymbolClasses+    primIntClasses = annClass PEnv.primIntClasses     primTypeErrorClasses = annClass PEnv.primTypeErrorClasses
src/Language/PureScript/Interactive/IO.hs view
@@ -1,13 +1,25 @@-module Language.PureScript.Interactive.IO (findNodeProcess, getHistoryFilename) where+{-# LANGUAGE TypeApplications #-} +module Language.PureScript.Interactive.IO (findNodeProcess, readNodeProcessWithExitCode, getHistoryFilename) where+ import Prelude.Compat -import Control.Monad (msum)+import Control.Monad (msum, void)+import Control.Monad.Error.Class (throwError)+import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.Except (ExceptT(..), runExceptT) import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)+import Data.Functor ((<&>))+import Data.List (isInfixOf) import System.Directory (XdgDirectory (..), createDirectoryIfMissing,                          getAppUserDataDirectory, getXdgDirectory,                          findExecutable, doesFileExist)+import System.Exit (ExitCode(ExitFailure, ExitSuccess)) import System.FilePath (takeDirectory, (</>))+import System.Process (readProcessWithExitCode)+import Text.Parsec ((<?>), many1, parse, sepBy)+import Text.Parsec.Char (char, digit)+import Protolude (note)  mkdirp :: FilePath -> IO () mkdirp = createDirectoryIfMissing True . takeDirectory@@ -21,9 +33,42 @@ -- Locates the node executable. -- Checks for either @nodejs@ or @node@. ---findNodeProcess :: IO (Maybe String)-findNodeProcess = onFirstFileMatching findExecutable names-  where names = ["nodejs", "node"]+findNodeProcess :: IO (Either String String)+findNodeProcess = onFirstFileMatching findExecutable ["nodejs", "node"] <&>+  note "Could not find Node.js. Do you have Node.js installed and available in your PATH?"++findNodeVersion :: String -> IO (Maybe String)+findNodeVersion node = do+  result <- readProcessWithExitCode node ["--version"] ""+  return $ case result of+    (ExitSuccess, version, _) -> Just version+    (ExitFailure _, _, _) -> Nothing++readNodeProcessWithExitCode :: Maybe FilePath -> [String] -> String -> IO (Either String (ExitCode, String, String))+readNodeProcessWithExitCode nodePath nodeArgs stdin = runExceptT $ do+  process <- maybe (ExceptT findNodeProcess) pure nodePath+  (major, _, _) <- lift (findNodeVersion process) >>= \case+    Nothing -> throwError "Could not find Node.js version."+    Just version -> do+      let semver = do+            void $ char 'v'+            major : minor : patch : _ <- fmap (read @Int) (many1 digit) `sepBy` void (char '.')+            pure (major, minor, patch)+      case parse (semver <?> "Could not parse Node.js version.") "" version of+        Left err -> throwError $ show err+        Right (major, minor, patch)+          | major < 12 -> throwError $ "Unsupported Node.js version " <> show major <> ". Required Node.js version >=12."+          | otherwise -> pure (major, minor, patch)+  let nodeArgs' = if major < 13 then "--experimental-modules" : nodeArgs else nodeArgs+  lift (readProcessWithExitCode process nodeArgs' stdin) <&> \case+    (ExitSuccess, out, err) ->+      (ExitSuccess, out, censorExperimentalWarnings err)+    (ExitFailure code, out, err) ->+      (ExitFailure code, out, err)++censorExperimentalWarnings :: String -> String+censorExperimentalWarnings =+  unlines . filter (not . ("ExperimentalWarning" `isInfixOf`)) . lines  -- | -- Grabs the filename where the history is stored.
src/Language/PureScript/Interactive/Module.hs view
@@ -89,7 +89,7 @@ indexFile = ".psci_modules" ++ pathSeparator : "index.js"  modulesDir :: FilePath-modulesDir = ".psci_modules" ++ pathSeparator : "node_modules"+modulesDir = ".psci_modules"  internalSpan :: P.SourceSpan internalSpan = P.internalModuleSourceSpan "<internal>"
+ src/Language/PureScript/Label.hs view
@@ -0,0 +1,21 @@+module Language.PureScript.Label (Label(..)) where++import Prelude.Compat hiding (lex)+import GHC.Generics (Generic)+import Codec.Serialise (Serialise)+import Control.DeepSeq (NFData)+import Data.Monoid ()+import Data.String (IsString(..))+import qualified Data.Aeson as A++import Language.PureScript.PSString (PSString)++-- |+-- Labels are used as record keys and row entry names. Labels newtype PSString+-- because records are indexable by PureScript strings at runtime.+--+newtype Label = Label { runLabel :: PSString }+  deriving (Show, Eq, Ord, IsString, Semigroup, Monoid, A.ToJSON, A.FromJSON, Generic)++instance NFData Label+instance Serialise Label
src/Language/PureScript/Linter.hs view
@@ -113,6 +113,7 @@       go unused (BinaryNoParensType _ t1 t2 t3) = go unused t1 `combine` go unused t2 `combine` go unused t3       go unused TUnknown{} = (unused, mempty)       go unused TypeLevelString{} = (unused, mempty)+      go unused TypeLevelInt{} = (unused, mempty)       go unused TypeWildcard{} = (unused, mempty)       go unused TypeConstructor{} = (unused, mempty)       go unused TypeOp{} = (unused, mempty)
src/Language/PureScript/Linter/Exhaustive.hs view
@@ -281,7 +281,7 @@   addPartialConstraint :: ([[Binder]], Bool) -> Expr -> Expr   addPartialConstraint (bss, complete) e =     TypedValue True e $-      srcConstrainedType (srcConstraint C.Partial [] [] (Just constraintData)) srcTypeWildcard+      srcConstrainedType (srcConstraint C.Partial [] [] (Just constraintData)) $ TypeWildcard NullSourceAnn IgnoredWildcard     where       constraintData :: ConstraintData       constraintData =
+ src/Language/PureScript/Linter/Wildcards.hs view
@@ -0,0 +1,40 @@+module Language.PureScript.Linter.Wildcards+  ( ignoreWildcardsUnderCompleteTypeSignatures+  ) where++import Protolude hiding (Type)++import Language.PureScript.AST+import Language.PureScript.Types++-- |+-- Replaces `TypeWildcard _ UnnamedWildcard` with+-- `TypeWildcard _ IgnoredWildcard` in places where we don't want to emit a+-- warning about wildcards.+--+-- The guiding principle here is that a wildcard can be ignored if there is a+-- complete (wildcard-free) type signature on a binding somewhere between the+-- type in which the wildcard occurs and the top level of the module. In+-- particular, this means that top-level signatures containing wildcards are+-- always warnings, and a top-level signature always prevents wildcards on+-- inner bindings from emitting warnings.+--+ignoreWildcardsUnderCompleteTypeSignatures :: Declaration -> Declaration+ignoreWildcardsUnderCompleteTypeSignatures = onDecl+  where+  (onDecl, _, _, _, _) = everywhereWithContextOnValues False (,) handleExpr (,) (,) (,)+  handleExpr isCovered = \case+    tv@(TypedValue chk v ty)+      | isCovered -> (True, TypedValue chk v $ ignoreWildcards ty)+      | otherwise -> (isComplete ty, tv)+    other -> (isCovered, other)++ignoreWildcards :: Type a -> Type a+ignoreWildcards = everywhereOnTypes $ \case+  TypeWildcard a UnnamedWildcard -> TypeWildcard a IgnoredWildcard+  other -> other++isComplete :: Type a -> Bool+isComplete = everythingOnTypes (&&) $ \case+  TypeWildcard{} -> False+  _ -> True
src/Language/PureScript/Make.hs view
@@ -73,8 +73,19 @@   -> [ExternsFile]   -> Module   -> m ExternsFile-rebuildModule' MakeActions{..} exEnv externs m@(Module _ _ moduleName _ _) = do-  progress $ CompilingModule moduleName+rebuildModule' act env ext mdl = rebuildModuleWithIndex act env ext mdl Nothing++rebuildModuleWithIndex+  :: forall m+   . (Monad m, MonadBaseControl IO m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)+  => MakeActions m+  -> Env+  -> [ExternsFile]+  -> Module+  -> Maybe (Int, Int)+  -> m ExternsFile+rebuildModuleWithIndex MakeActions{..} exEnv externs m@(Module _ _ moduleName _ _) moduleIndex = do+  progress $ CompilingModule moduleName moduleIndex   let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs       withPrim = importPrim m   lint withPrim@@ -138,10 +149,11 @@   (buildPlan, newCacheDb) <- BuildPlan.construct ma cacheDb (sorted, graph)    let toBeRebuilt = filter (BuildPlan.needsRebuild buildPlan . getModuleName . CST.resPartial) sorted+  let totalModuleCount = length toBeRebuilt   for_ toBeRebuilt $ \m -> fork $ do     let moduleName = getModuleName . CST.resPartial $ m     let deps = fromMaybe (internalError "make: module not found in dependency graph.") (lookup moduleName graph)-    buildModule buildPlan moduleName+    buildModule buildPlan moduleName totalModuleCount       (spanName . getModuleSourceSpan . CST.resPartial $ m)       (fst $ CST.resFull m)       (fmap importPrim . snd $ CST.resFull m)@@ -167,6 +179,8 @@   -- Write the updated build cache database to disk   writeCacheDb $ Cache.removeModules (M.keysSet failures) newCacheDb +  writePackageJson+   -- If generating docs, also generate them for the Prim modules   outputPrimDocs @@ -213,8 +227,8 @@   inOrderOf :: (Ord a) => [a] -> [a] -> [a]   inOrderOf xs ys = let s = S.fromList xs in filter (`S.member` s) ys -  buildModule :: BuildPlan -> ModuleName -> FilePath -> [CST.ParserWarning] -> Either (NEL.NonEmpty CST.ParserError) Module -> [ModuleName] -> m ()-  buildModule buildPlan moduleName fp pwarnings mres deps = do+  buildModule :: BuildPlan -> ModuleName -> Int -> FilePath -> [CST.ParserWarning] -> Either (NEL.NonEmpty CST.ParserError) Module -> [ModuleName] -> m ()+  buildModule buildPlan moduleName cnt fp pwarnings mres deps = do     result <- flip catchError (return . BuildJobFailed) $ do       let pwarnings' = CST.toMultipleWarnings fp pwarnings       tell pwarnings'@@ -236,7 +250,9 @@                 _ -> return e             foldM go env deps           env <- C.readMVar (bpEnv buildPlan)-          (exts, warnings) <- listen $ rebuildModule' ma env externs m+          idx <- C.takeMVar (bpIndex buildPlan)+          C.putMVar (bpIndex buildPlan) (idx + 1)+          (exts, warnings) <- listen $ rebuildModuleWithIndex ma env externs m (Just (idx, cnt))           return $ BuildJobSucceeded (pwarnings' <> warnings) exts         Nothing -> return BuildJobSkipped 
src/Language/PureScript/Make/Actions.hs view
@@ -2,6 +2,7 @@   ( MakeActions(..)   , RebuildPolicy(..)   , ProgressMessage(..)+  , renderProgressMessage   , buildMakeActions   , checkForeignDecls   , cacheDbFile@@ -18,7 +19,8 @@ import           Control.Monad.Supply import           Control.Monad.Trans.Class (MonadTrans(..)) import           Control.Monad.Writer.Class (MonadWriter(..))-import           Data.Bifunctor (bimap)+import           Data.Aeson (Value(String), (.=), object)+import           Data.Bifunctor (bimap, first) import           Data.Either (partitionEithers) import           Data.Foldable (for_) import qualified Data.List.NonEmpty as NEL@@ -37,7 +39,6 @@ import           Language.PureScript.CodeGen.JS.Printer import qualified Language.PureScript.CoreFn as CF import qualified Language.PureScript.CoreFn.ToJSON as CFJ-import qualified Language.PureScript.CoreImp.AST as Imp import           Language.PureScript.Crash import qualified Language.PureScript.CST as CST import qualified Language.PureScript.Docs.Prim as Docs.Prim@@ -66,13 +67,25 @@  -- | Progress messages from the make process data ProgressMessage-  = CompilingModule ModuleName+  = CompilingModule ModuleName (Maybe (Int, Int))   -- ^ Compilation started for the specified module   deriving (Show, Eq, Ord)  -- | Render a progress message-renderProgressMessage :: ProgressMessage -> T.Text-renderProgressMessage (CompilingModule mn) = T.append "Compiling " (runModuleName mn)+renderProgressMessage :: T.Text -> ProgressMessage -> T.Text+renderProgressMessage infx (CompilingModule mn mi) =+  T.concat+    [ renderProgressIndex mi+    , infx+    , runModuleName mn+    ]+  where+  renderProgressIndex :: Maybe (Int, Int) -> T.Text+  renderProgressIndex = maybe "" $ \(start, end) ->+    let start' = T.pack (show start)+        end' = T.pack (show end)+        preSpace = T.replicate (T.length end' - T.length start') " "+    in "[" <> preSpace <> start' <> " of " <> end' <> "] "  -- | Actions that require implementations when running in "make" mode. --@@ -109,6 +122,9 @@   , writeCacheDb :: CacheDb -> m ()   -- ^ Write the given cache database to some external source (e.g. a file on   -- disk).+  , writePackageJson :: m ()+  -- ^ Write to the output directory the package.json file allowing Node.js to+  -- load .js files as ES modules.   , outputPrimDocs :: m ()   -- ^ If generating docs, output the documentation for the Prim modules   }@@ -135,6 +151,15 @@   -> m () writeCacheDb' = writeJSONFile . cacheDbFile +writePackageJson'+  :: (MonadIO m, MonadError MultipleErrors m)+  => FilePath+  -- ^ The path to the output directory+  -> m ()+writePackageJson' outputDir = writeJSONFile (outputDir </> "package.json") $ object+  [ "type" .= String "module"+  ]+ -- | A set of make actions that read and write modules from the given directory. buildMakeActions   :: FilePath@@ -147,7 +172,7 @@   -- ^ Generate a prefix comment?   -> MakeActions Make buildMakeActions outputDir filePathMap foreigns usePrefix =-    MakeActions getInputTimestampsAndHashes getOutputTimestamp readExterns codegen ffiCodegen progress readCacheDb writeCacheDb outputPrimDocs+    MakeActions getInputTimestampsAndHashes getOutputTimestamp readExterns codegen ffiCodegen progress readCacheDb writeCacheDb writePackageJson outputPrimDocs   where    getInputTimestampsAndHashes@@ -233,7 +258,7 @@           | not $ requiresForeign m -> do               return Nothing           | otherwise -> do-              return $ Just $ Imp.App Nothing (Imp.Var Nothing "require") [Imp.StringLiteral Nothing "./foreign.js"]+              return $ Just "./foreign.js"         Nothing | requiresForeign m -> throwError . errorMessage' (CF.moduleSourceSpan m) $ MissingFFIModule mn                 | otherwise -> return Nothing       rawJs <- J.moduleToJs m foreignInclude@@ -260,13 +285,18 @@         Just path           | not $ requiresForeign m ->               tell $ errorMessage' (CF.moduleSourceSpan m) $ UnnecessaryFFIModule mn path-          | otherwise ->-              checkForeignDecls m path+          | otherwise -> do+              checkResult <- checkForeignDecls m path+              case checkResult of+                Left _ -> copyFile path (outputFilename mn "foreign.js")+                Right (ESModule, _) -> copyFile path (outputFilename mn "foreign.js")+                Right (CJSModule, _) -> do+                  throwError $ errorMessage' (CF.moduleSourceSpan m) $ DeprecatedFFICommonJSModule mn path+         Nothing | requiresForeign m -> throwError . errorMessage' (CF.moduleSourceSpan m) $ MissingFFIModule mn                 | otherwise -> return ()-      for_ (mn `M.lookup` foreigns) $ \path ->-        copyFile path (outputFilename mn "foreign.js") +   genSourceMap :: String -> String -> Int -> [SMap] -> Make ()   genSourceMap dir mapFile extraLines mappings = do     let pathToDir = iterate (".." </>) ".." !! length (splitPath $ normalise outputDir)@@ -295,7 +325,7 @@   requiresForeign = not . null . CF.moduleForeign    progress :: ProgressMessage -> Make ()-  progress = liftIO . TIO.hPutStr stderr . (<> "\n") . renderProgressMessage+  progress = liftIO . TIO.hPutStr stderr . (<> "\n") . renderProgressMessage "Compiling "    readCacheDb :: Make CacheDb   readCacheDb = readCacheDb' outputDir@@ -303,52 +333,90 @@   writeCacheDb :: CacheDb -> Make ()   writeCacheDb = writeCacheDb' outputDir +  writePackageJson :: Make ()+  writePackageJson = writePackageJson' outputDir++data ForeignModuleType = ESModule | CJSModule deriving (Show)+ -- | Check that the declarations in a given PureScript module match with those -- in its corresponding foreign module.-checkForeignDecls :: CF.Module ann -> FilePath -> Make ()+checkForeignDecls :: CF.Module ann -> FilePath -> Make (Either MultipleErrors (ForeignModuleType, S.Set Ident)) checkForeignDecls m path = do   jsStr <- T.unpack <$> readTextFile path-  js <- either (errorParsingModule . Bundle.UnableToParseModule) pure $ JS.parse jsStr path -  foreignIdentsStrs <- either errorParsingModule pure $ getExps js+  let+    parseResult :: Either MultipleErrors JS.JSAST+    parseResult = first (errorParsingModule . Bundle.UnableToParseModule) $ JS.parseModule jsStr path+  traverse checkFFI parseResult -  let deprecatedFFI = filter (elem '\'') foreignIdentsStrs-  unless (null deprecatedFFI) $-    warningDeprecatedForeignPrimes deprecatedFFI+  where+  mname = CF.moduleName m+  modSS = CF.moduleSourceSpan m -  foreignIdents <- either-                     errorInvalidForeignIdentifiers-                     (pure . S.fromList)-                     (parseIdents foreignIdentsStrs)-  let importedIdents = S.fromList (CF.moduleForeign m)+  checkFFI :: JS.JSAST -> Make (ForeignModuleType, S.Set Ident)+  checkFFI js = do +    (foreignModuleType, foreignIdentsStrs) <-+        case (,) <$> getForeignModuleExports js <*> getForeignModuleImports js of+          Left reason -> throwError $ errorParsingModule reason+          Right (Bundle.ForeignModuleExports{..}, Bundle.ForeignModuleImports{..})+            | not (null cjsExports && null cjsImports)+            , null esExports+            , null esImports -> do+                let deprecatedFFI = filter (elem '\'') cjsExports+                unless (null deprecatedFFI) $+                  errorDeprecatedForeignPrimes deprecatedFFI -  let unusedFFI = foreignIdents S.\\ importedIdents-  unless (null unusedFFI) $-    tell . errorMessage' modSS . UnusedFFIImplementations mname $-      S.toList unusedFFI+                pure (CJSModule, cjsExports)+            | otherwise -> do+                unless (null cjsImports) $+                  errorUnsupportedFFICommonJSImports cjsImports -  let missingFFI = importedIdents S.\\ foreignIdents-  unless (null missingFFI) $-    throwError . errorMessage' modSS . MissingFFIImplementations mname $-      S.toList missingFFI+                unless (null cjsExports) $+                  errorUnsupportedFFICommonJSExports cjsExports -  where-  mname = CF.moduleName m-  modSS = CF.moduleSourceSpan m+                pure (ESModule, esExports) -  errorParsingModule :: Bundle.ErrorMessage -> Make a-  errorParsingModule = throwError . errorMessage' modSS . ErrorParsingFFIModule path . Just+    foreignIdents <- either+                      errorInvalidForeignIdentifiers+                      (pure . S.fromList)+                      (parseIdents foreignIdentsStrs)+    let importedIdents = S.fromList (CF.moduleForeign m) -  getExps :: JS.JSAST -> Either Bundle.ErrorMessage [String]-  getExps = Bundle.getExportedIdentifiers (T.unpack (runModuleName mname))+    let unusedFFI = foreignIdents S.\\ importedIdents+    unless (null unusedFFI) $+      tell . errorMessage' modSS . UnusedFFIImplementations mname $+        S.toList unusedFFI +    let missingFFI = importedIdents S.\\ foreignIdents+    unless (null missingFFI) $+      throwError . errorMessage' modSS . MissingFFIImplementations mname $+        S.toList missingFFI+    pure (foreignModuleType, foreignIdents)++  errorParsingModule :: Bundle.ErrorMessage -> MultipleErrors+  errorParsingModule = errorMessage' modSS . ErrorParsingFFIModule path . Just++  getForeignModuleExports :: JS.JSAST -> Either Bundle.ErrorMessage  Bundle.ForeignModuleExports+  getForeignModuleExports = Bundle.getExportedIdentifiers (T.unpack (runModuleName mname))++  getForeignModuleImports :: JS.JSAST -> Either Bundle.ErrorMessage Bundle.ForeignModuleImports+  getForeignModuleImports = Bundle.getImportedModules (T.unpack (runModuleName mname))+   errorInvalidForeignIdentifiers :: [String] -> Make a   errorInvalidForeignIdentifiers =     throwError . mconcat . map (errorMessage . InvalidFFIIdentifier mname . T.pack) -  warningDeprecatedForeignPrimes :: [String] -> Make ()-  warningDeprecatedForeignPrimes =-    tell . mconcat . map (errorMessage' modSS . DeprecatedFFIPrime mname . T.pack)+  errorDeprecatedForeignPrimes :: [String] -> Make a+  errorDeprecatedForeignPrimes =+    throwError . mconcat . map (errorMessage' modSS . DeprecatedFFIPrime mname . T.pack)++  errorUnsupportedFFICommonJSExports :: [String] -> Make a+  errorUnsupportedFFICommonJSExports =+    throwError . errorMessage' modSS . UnsupportedFFICommonJSExports mname . map T.pack++  errorUnsupportedFFICommonJSImports :: [String] -> Make a+  errorUnsupportedFFICommonJSImports =+    throwError . errorMessage' modSS . UnsupportedFFICommonJSImports mname . map T.pack    parseIdents :: [String] -> Either [String] [Ident]   parseIdents strs =
src/Language/PureScript/Make/BuildPlan.hs view
@@ -1,5 +1,5 @@ module Language.PureScript.Make.BuildPlan-  ( BuildPlan(bpEnv)+  ( BuildPlan(bpEnv, bpIndex)   , BuildJobResult(..)   , buildJobSuccess   , construct@@ -38,6 +38,7 @@   { bpPrebuilt :: M.Map ModuleName Prebuilt   , bpBuildJobs :: M.Map ModuleName BuildJob   , bpEnv :: C.MVar Env+  , bpIndex :: C.MVar Int   }  data Prebuilt = Prebuilt@@ -140,8 +141,9 @@   let toBeRebuilt = filter (not . flip M.member prebuilt) sortedModuleNames   buildJobs <- foldM makeBuildJob M.empty toBeRebuilt   env <- C.newMVar primEnv+  idx <- C.newMVar 1   pure-    ( BuildPlan prebuilt buildJobs env+    ( BuildPlan prebuilt buildJobs env idx     , let         update = flip $ \s ->           M.alter (const (statusNewCacheInfo s)) (statusModuleName s)
+ src/Language/PureScript/Names.hs view
@@ -0,0 +1,279 @@+{-# LANGUAGE TemplateHaskell #-}++-- |+-- Data types for names+--+module Language.PureScript.Names where++import Prelude.Compat++import Codec.Serialise (Serialise)+import Control.Monad.Supply.Class+import Control.DeepSeq (NFData)+import Data.Functor.Contravariant (contramap)+import qualified Data.Vector as V++import GHC.Generics (Generic)+import Data.Aeson+import Data.Aeson.TH+import Data.Text (Text)+import qualified Data.Text as T++-- | A sum of the possible name types, useful for error and lint messages.+data Name+  = IdentName Ident+  | ValOpName (OpName 'ValueOpName)+  | TyName (ProperName 'TypeName)+  | TyOpName (OpName 'TypeOpName)+  | DctorName (ProperName 'ConstructorName)+  | TyClassName (ProperName 'ClassName)+  | ModName ModuleName+  deriving (Eq, Ord, Show, Generic)++instance NFData Name+instance Serialise Name++getIdentName :: Name -> Maybe Ident+getIdentName (IdentName name) = Just name+getIdentName _ = Nothing++getValOpName :: Name -> Maybe (OpName 'ValueOpName)+getValOpName (ValOpName name) = Just name+getValOpName _ = Nothing++getTypeName :: Name -> Maybe (ProperName 'TypeName)+getTypeName (TyName name) = Just name+getTypeName _ = Nothing++getTypeOpName :: Name -> Maybe (OpName 'TypeOpName)+getTypeOpName (TyOpName name) = Just name+getTypeOpName _ = Nothing++getDctorName :: Name -> Maybe (ProperName 'ConstructorName)+getDctorName (DctorName name) = Just name+getDctorName _ = Nothing++getClassName :: Name -> Maybe (ProperName 'ClassName)+getClassName (TyClassName name) = Just name+getClassName _ = Nothing++-- |+-- This type is meant to be extended with any new uses for idents that come+-- along. Adding constructors to this type is cheaper than adding them to+-- `Ident` because functions that match on `Ident` can ignore all+-- `InternalIdent`s with a single pattern, and thus don't have to change if+-- a new `InternalIdentData` constructor is created.+--+data InternalIdentData+  -- Used by CoreFn.Laziness+  = RuntimeLazyFactory | Lazy !Text+  deriving (Show, Eq, Ord, Generic)++instance NFData InternalIdentData+instance Serialise InternalIdentData++-- |+-- Names for value identifiers+--+data Ident+  -- |+  -- An alphanumeric identifier+  --+  = Ident Text+  -- |+  -- A generated name for an identifier+  --+  | GenIdent (Maybe Text) Integer+  -- |+  -- A generated name used only for type-checking+  --+  | UnusedIdent+  -- |+  -- A generated name used only for internal transformations+  --+  | InternalIdent !InternalIdentData+  deriving (Show, Eq, Ord, Generic)++instance NFData Ident+instance Serialise Ident++unusedIdent :: Text+unusedIdent = "$__unused"++runIdent :: Ident -> Text+runIdent (Ident i) = i+runIdent (GenIdent Nothing n) = "$" <> T.pack (show n)+runIdent (GenIdent (Just name) n) = "$" <> name <> T.pack (show n)+runIdent UnusedIdent = unusedIdent+runIdent InternalIdent{} = error "unexpected InternalIdent"++showIdent :: Ident -> Text+showIdent = runIdent++freshIdent :: MonadSupply m => Text -> m Ident+freshIdent name = GenIdent (Just name) <$> fresh++freshIdent' :: MonadSupply m => m Ident+freshIdent' = GenIdent Nothing <$> fresh++isPlainIdent :: Ident -> Bool+isPlainIdent Ident{} = True+isPlainIdent _ = False++-- |+-- Operator alias names.+--+newtype OpName (a :: OpNameType) = OpName { runOpName :: Text }+  deriving (Show, Eq, Ord, Generic)++instance NFData (OpName a)+instance Serialise (OpName a)++instance ToJSON (OpName a) where+  toJSON = toJSON . runOpName++instance FromJSON (OpName a) where+  parseJSON = fmap OpName . parseJSON++showOp :: OpName a -> Text+showOp op = "(" <> runOpName op <> ")"++-- |+-- The closed set of operator alias types.+--+data OpNameType = ValueOpName | TypeOpName | AnyOpName++eraseOpName :: OpName a -> OpName 'AnyOpName+eraseOpName = OpName . runOpName++coerceOpName :: OpName a -> OpName b+coerceOpName = OpName . runOpName++-- |+-- Proper names, i.e. capitalized names for e.g. module names, type//data constructors.+--+newtype ProperName (a :: ProperNameType) = ProperName { runProperName :: Text }+  deriving (Show, Eq, Ord, Generic)++instance NFData (ProperName a)+instance Serialise (ProperName a)++instance ToJSON (ProperName a) where+  toJSON = toJSON . runProperName++instance FromJSON (ProperName a) where+  parseJSON = fmap ProperName . parseJSON++-- |+-- The closed set of proper name types.+--+data ProperNameType+  = TypeName+  | ConstructorName+  | ClassName+  | Namespace++-- |+-- Coerces a ProperName from one ProperNameType to another. This should be used+-- with care, and is primarily used to convert ClassNames into TypeNames after+-- classes have been desugared.+--+coerceProperName :: ProperName a -> ProperName b+coerceProperName = ProperName . runProperName++-- |+-- Module names+--+newtype ModuleName = ModuleName Text+  deriving (Show, Eq, Ord, Generic)+  deriving newtype Serialise++instance NFData ModuleName++runModuleName :: ModuleName -> Text+runModuleName (ModuleName name) = name++moduleNameFromString :: Text -> ModuleName+moduleNameFromString = ModuleName++isBuiltinModuleName :: ModuleName -> Bool+isBuiltinModuleName (ModuleName mn) = mn == "Prim" || "Prim." `T.isPrefixOf` mn++-- |+-- A qualified name, i.e. a name with an optional module name+--+data Qualified a = Qualified (Maybe ModuleName) a+  deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Generic)++instance NFData a => NFData (Qualified a)+instance Serialise a => Serialise (Qualified a)++showQualified :: (a -> Text) -> Qualified a -> Text+showQualified f (Qualified Nothing a) = f a+showQualified f (Qualified (Just name) a) = runModuleName name <> "." <> f a++getQual :: Qualified a -> Maybe ModuleName+getQual (Qualified mn _) = mn++-- |+-- Provide a default module name, if a name is unqualified+--+qualify :: ModuleName -> Qualified a -> (ModuleName, a)+qualify m (Qualified Nothing a) = (m, a)+qualify _ (Qualified (Just m) a) = (m, a)++-- |+-- Makes a qualified value from a name and module name.+--+mkQualified :: a -> ModuleName -> Qualified a+mkQualified name mn = Qualified (Just mn) name++-- | Remove the module name from a qualified name+disqualify :: Qualified a -> a+disqualify (Qualified _ a) = a++-- |+-- Remove the qualification from a value when it is qualified with a particular+-- module name.+--+disqualifyFor :: Maybe ModuleName -> Qualified a -> Maybe a+disqualifyFor mn (Qualified mn' a) | mn == mn' = Just a+disqualifyFor _ _ = Nothing++-- |+-- Checks whether a qualified value is actually qualified with a module reference+--+isQualified :: Qualified a -> Bool+isQualified (Qualified Nothing _) = False+isQualified _ = True++-- |+-- Checks whether a qualified value is not actually qualified with a module reference+--+isUnqualified :: Qualified a -> Bool+isUnqualified = not . isQualified++-- |+-- Checks whether a qualified value is qualified with a particular module+--+isQualifiedWith :: ModuleName -> Qualified a -> Bool+isQualifiedWith mn (Qualified (Just mn') _) = mn == mn'+isQualifiedWith _ _ = False++$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''Qualified)+$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''Ident)+$(deriveJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) ''InternalIdentData)++instance ToJSON ModuleName where+  toJSON (ModuleName name) = toJSON (T.splitOn "." name)++instance FromJSON ModuleName where+  parseJSON = withArray "ModuleName" $ \names -> do+    names' <- traverse parseJSON names+    pure (ModuleName (T.intercalate "." (V.toList names')))++instance ToJSONKey ModuleName where+  toJSONKey = contramap runModuleName toJSONKey++instance FromJSONKey ModuleName where+  fromJSONKey = fmap moduleNameFromString fromJSONKey
+ src/Language/PureScript/PSString.hs view
@@ -0,0 +1,239 @@+module Language.PureScript.PSString+  ( PSString+  , toUTF16CodeUnits+  , decodeString+  , decodeStringEither+  , decodeStringWithReplacement+  , prettyPrintString+  , prettyPrintStringJS+  , mkString+  ) where++import Prelude.Compat+import GHC.Generics (Generic)+import Codec.Serialise (Serialise)+import Control.DeepSeq (NFData)+import Control.Exception (try, evaluate)+import Control.Applicative ((<|>))+import qualified Data.Char as Char+import Data.Bits (shiftR)+import Data.List (unfoldr)+import Data.Scientific (toBoundedInteger)+import Data.String (IsString(..))+import Data.ByteString (ByteString)+import qualified Data.ByteString as BS+import Data.Text (Text)+import qualified Data.Text as T+import Data.Text.Encoding (decodeUtf16BE)+import Data.Text.Encoding.Error (UnicodeException)+import qualified Data.Vector as V+import Data.Word (Word16, Word8)+import Numeric (showHex)+import System.IO.Unsafe (unsafePerformIO)+import qualified Data.Aeson as A+import qualified Data.Aeson.Types as A++-- |+-- Strings in PureScript are sequences of UTF-16 code units, which do not+-- necessarily represent UTF-16 encoded text. For example, it is permissible+-- for a string to contain *lone surrogates,* i.e. characters in the range+-- U+D800 to U+DFFF which do not appear as a part of a surrogate pair.+--+-- The Show instance for PSString produces a string literal which would+-- represent the same data were it inserted into a PureScript source file.+--+-- Because JSON parsers vary wildly in terms of how they deal with lone+-- surrogates in JSON strings, the ToJSON instance for PSString produces JSON+-- strings where that would be safe (i.e. when there are no lone surrogates),+-- and arrays of UTF-16 code units (integers) otherwise.+--+newtype PSString = PSString { toUTF16CodeUnits :: [Word16] }+  deriving (Eq, Ord, Semigroup, Monoid, Generic)++instance NFData PSString+instance Serialise PSString++instance Show PSString where+  show = show . codePoints++-- |+-- Decode a PSString to a String, representing any lone surrogates as the+-- reserved code point with that index. Warning: if there are any lone+-- surrogates, converting the result to Text via Data.Text.pack will result in+-- loss of information as those lone surrogates will be replaced with U+FFFD+-- REPLACEMENT CHARACTER. Because this function requires care to use correctly,+-- we do not export it.+--+codePoints :: PSString -> String+codePoints = map (either (Char.chr . fromIntegral) id) . decodeStringEither++-- |+-- Decode a PSString as UTF-16 text. Lone surrogates will be replaced with+-- U+FFFD REPLACEMENT CHARACTER+--+decodeStringWithReplacement :: PSString -> String+decodeStringWithReplacement = map (either (const '\xFFFD') id) . decodeStringEither++-- |+-- Decode a PSString as UTF-16. Lone surrogates in the input are represented in+-- the output with the Left constructor; characters which were successfully+-- decoded are represented with the Right constructor.+--+decodeStringEither :: PSString -> [Either Word16 Char]+decodeStringEither = unfoldr decode . toUTF16CodeUnits+  where+  decode :: [Word16] -> Maybe (Either Word16 Char, [Word16])+  decode (h:l:rest) | isLead h && isTrail l = Just (Right (unsurrogate h l), rest)+  decode (c:rest) | isSurrogate c = Just (Left c, rest)+  decode (c:rest) = Just (Right (toChar c), rest)+  decode [] = Nothing++  unsurrogate :: Word16 -> Word16 -> Char+  unsurrogate h l = toEnum ((toInt h - 0xD800) * 0x400 + (toInt l - 0xDC00) + 0x10000)++-- |+-- Attempt to decode a PSString as UTF-16 text. This will fail (returning+-- Nothing) if the argument contains lone surrogates.+--+decodeString :: PSString -> Maybe Text+decodeString = hush . decodeEither . BS.pack . concatMap unpair . toUTF16CodeUnits+  where+  unpair w = [highByte w, lowByte w]++  lowByte :: Word16 -> Word8+  lowByte = fromIntegral++  highByte :: Word16 -> Word8+  highByte = fromIntegral . (`shiftR` 8)++  -- Based on a similar function from Data.Text.Encoding for utf8. This is a+  -- safe usage of unsafePerformIO because there are no side effects after+  -- handling any thrown UnicodeExceptions.+  decodeEither :: ByteString -> Either UnicodeException Text+  decodeEither = unsafePerformIO . try . evaluate . decodeUtf16BE++  hush = either (const Nothing) Just++instance IsString PSString where+  fromString a = PSString $ concatMap encodeUTF16 a+    where+    surrogates :: Char -> (Word16, Word16)+    surrogates c = (toWord (h + 0xD800), toWord (l + 0xDC00))+      where (h, l) = divMod (fromEnum c - 0x10000) 0x400++    encodeUTF16 :: Char -> [Word16]+    encodeUTF16 c | fromEnum c > 0xFFFF = [high, low]+      where (high, low) = surrogates c+    encodeUTF16 c = [toWord $ fromEnum c]++instance A.ToJSON PSString where+  toJSON str =+    case decodeString str of+      Just t -> A.toJSON t+      Nothing -> A.toJSON (toUTF16CodeUnits str)++instance A.FromJSON PSString where+  parseJSON a = jsonString <|> arrayOfCodeUnits+    where+    jsonString = fromString <$> A.parseJSON a++    arrayOfCodeUnits = PSString <$> parseArrayOfCodeUnits a++    parseArrayOfCodeUnits :: A.Value -> A.Parser [Word16]+    parseArrayOfCodeUnits = A.withArray "array of UTF-16 code units" (traverse parseCodeUnit . V.toList)++    parseCodeUnit :: A.Value -> A.Parser Word16+    parseCodeUnit b = A.withScientific "two-byte non-negative integer" (maybe (A.typeMismatch "" b) return . toBoundedInteger) b++-- |+-- Pretty print a PSString, using PureScript escape sequences.+--+prettyPrintString :: PSString -> Text+prettyPrintString s = "\"" <> foldMap encodeChar (decodeStringEither s) <> "\""+  where+  encodeChar :: Either Word16 Char -> Text+  encodeChar (Left c) = "\\x" <> showHex' 6 c+  encodeChar (Right c)+    | c == '\t' = "\\t"+    | c == '\r' = "\\r"+    | c == '\n' = "\\n"+    | c == '"'  = "\\\""+    | c == '\''  = "\\\'"+    | c == '\\' = "\\\\"+    | shouldPrint c = T.singleton c+    | otherwise = "\\x" <> showHex' 6 (Char.ord c)++  -- Note we do not use Data.Char.isPrint here because that includes things+  -- like zero-width spaces and combining punctuation marks, which could be+  -- confusing to print unescaped.+  shouldPrint :: Char -> Bool+  -- The standard space character, U+20 SPACE, is the only space char we should+  -- print without escaping+  shouldPrint ' ' = True+  shouldPrint c =+    Char.generalCategory c `elem`+      [ Char.UppercaseLetter+      , Char.LowercaseLetter+      , Char.TitlecaseLetter+      , Char.OtherLetter+      , Char.DecimalNumber+      , Char.LetterNumber+      , Char.OtherNumber+      , Char.ConnectorPunctuation+      , Char.DashPunctuation+      , Char.OpenPunctuation+      , Char.ClosePunctuation+      , Char.InitialQuote+      , Char.FinalQuote+      , Char.OtherPunctuation+      , Char.MathSymbol+      , Char.CurrencySymbol+      , Char.ModifierSymbol+      , Char.OtherSymbol+      ]++-- |+-- Pretty print a PSString, using JavaScript escape sequences. Intended for+-- use in compiled JS output.+--+prettyPrintStringJS :: PSString -> Text+prettyPrintStringJS s = "\"" <> foldMap encodeChar (toUTF16CodeUnits s) <> "\""+  where+  encodeChar :: Word16 -> Text+  encodeChar c | c > 0xFF = "\\u" <> showHex' 4 c+  encodeChar c | c > 0x7E || c < 0x20 = "\\x" <> showHex' 2 c+  encodeChar c | toChar c == '\b' = "\\b"+  encodeChar c | toChar c == '\t' = "\\t"+  encodeChar c | toChar c == '\n' = "\\n"+  encodeChar c | toChar c == '\v' = "\\v"+  encodeChar c | toChar c == '\f' = "\\f"+  encodeChar c | toChar c == '\r' = "\\r"+  encodeChar c | toChar c == '"'  = "\\\""+  encodeChar c | toChar c == '\\' = "\\\\"+  encodeChar c = T.singleton $ toChar c++showHex' :: Enum a => Int -> a -> Text+showHex' width c =+  let hs = showHex (fromEnum c) "" in+  T.pack (replicate (width - length hs) '0' <> hs)++isLead :: Word16 -> Bool+isLead h = h >= 0xD800 && h <= 0xDBFF++isTrail :: Word16 -> Bool+isTrail l = l >= 0xDC00 && l <= 0xDFFF++isSurrogate :: Word16 -> Bool+isSurrogate c = isLead c || isTrail c++toChar :: Word16 -> Char+toChar = toEnum . fromIntegral++toWord :: Int -> Word16+toWord = fromIntegral++toInt :: Word16 -> Int+toInt = fromIntegral++mkString :: Text -> PSString+mkString = fromString . T.unpack
src/Language/PureScript/Pretty/Types.hs view
@@ -43,6 +43,7 @@   = PPTUnknown Int   | PPTypeVar Text (Maybe Text)   | PPTypeLevelString PSString+  | PPTypeLevelInt Integer   | PPTypeWildcard (Maybe Text)   | PPTypeConstructor (Qualified (ProperName 'TypeName))   | PPTypeOp (Qualified (OpName 'TypeOpName))@@ -67,7 +68,9 @@   go _ (TUnknown _ n) = PPTUnknown n   go _ (TypeVar _ t) = PPTypeVar t Nothing   go _ (TypeLevelString _ s) = PPTypeLevelString s-  go _ (TypeWildcard _ n) = PPTypeWildcard n+  go _ (TypeLevelInt _ n) = PPTypeLevelInt n+  go _ (TypeWildcard _ (HoleWildcard n)) = PPTypeWildcard (Just n)+  go _ (TypeWildcard _ _) = PPTypeWildcard Nothing   go _ (TypeConstructor _ c) = PPTypeConstructor c   go _ (TypeOp _ o) = PPTypeOp o   go _ (Skolem _ t _ n _) = PPSkolem t n@@ -186,6 +189,7 @@       match (PPTypeWildcard name) = Just $ text $ maybe "_" (('?' :) . T.unpack) name       match (PPTypeVar var _) = Just $ text $ T.unpack var       match (PPTypeLevelString s) = Just $ text $ T.unpack $ prettyPrintString s+      match (PPTypeLevelInt n) = Just $ text $ show n       match (PPTypeConstructor ctor) = Just $ text $ T.unpack $ runProperName $ disqualify ctor       match (PPTUnknown u)         | suggesting = Just $ text "_"
+ src/Language/PureScript/Roles.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE TemplateHaskell #-}++-- |+-- Data types for roles.+--+module Language.PureScript.Roles+  ( Role(..)+  , displayRole+  ) where++import Prelude.Compat++import Codec.Serialise (Serialise)+import Control.DeepSeq (NFData)+import qualified Data.Aeson as A+import qualified Data.Aeson.TH as A+import Data.Text (Text)+import GHC.Generics (Generic)++-- |+-- The role of a type constructor's parameter.+data Role+  = Nominal+  -- ^ This parameter's identity affects the representation of the type it is+  -- parameterising.+  | Representational+  -- ^ This parameter's representation affects the representation of the type it+  -- is parameterising.+  | Phantom+  -- ^ This parameter has no effect on the representation of the type it is+  -- parameterising.+  deriving (Show, Eq, Ord, Generic)++instance NFData Role+instance Serialise Role++$(A.deriveJSON A.defaultOptions ''Role)++displayRole :: Role -> Text+displayRole r = case r of+  Nominal -> "nominal"+  Representational -> "representational"+  Phantom -> "phantom"
src/Language/PureScript/Sugar/Names/Env.hs view
@@ -205,6 +205,11 @@ primSymbolExports = mkPrimExports primSymbolTypes primSymbolClasses  -- |+-- The exported types from the @Prim.Int@ module+primIntExports :: Exports+primIntExports = mkPrimExports primIntTypes primIntClasses++-- | -- The exported types from the @Prim.TypeError@ module -- primTypeErrorExports :: Exports@@ -255,6 +260,9 @@     )   , ( C.PrimSymbol     , (internalModuleSourceSpan "<Prim.Symbol>", nullImports, primSymbolExports)+    )+  , ( C.PrimInt+    , (internalModuleSourceSpan "<Prim.Int>", nullImports, primIntExports)     )   , ( C.PrimTypeError     , (internalModuleSourceSpan "<Prim.TypeError>", nullImports, primTypeErrorExports)
src/Language/PureScript/Sugar/ObjectWildcards.hs view
@@ -31,16 +31,6 @@   (fn, _, _) = everywhereOnValuesTopDownM return desugarExpr return    desugarExpr :: Expr -> m Expr-  desugarExpr AnonymousArgument = throwError . errorMessage $ IncorrectAnonymousArgument-  desugarExpr (Parens b)-    | b' <- stripPositionInfo b-    , BinaryNoParens op val u <- b'-    , isAnonymousArgument u = do arg <- freshIdent'-                                 return $ Abs (VarBinder nullSourceSpan arg) $ App (App op val) (Var nullSourceSpan (Qualified Nothing arg))-    | b' <- stripPositionInfo b-    , BinaryNoParens op u val <- b'-    , isAnonymousArgument u = do arg <- freshIdent'-                                 return $ Abs (VarBinder nullSourceSpan arg) $ App (App op (Var nullSourceSpan (Qualified Nothing arg))) val   desugarExpr (Literal ss (ObjectLiteral ps)) = wrapLambdaAssoc (Literal ss . ObjectLiteral) ps   desugarExpr (ObjectUpdateNested obj ps) = transformNestedUpdate obj ps   desugarExpr (Accessor prop u)@@ -96,20 +86,11 @@   wrapLambdaAssoc :: ([(PSString, Expr)] -> Expr) -> [(PSString, Expr)] -> m Expr   wrapLambdaAssoc mkVal = wrapLambda (mkVal . runAssocList) . AssocList -  stripPositionInfo :: Expr -> Expr-  stripPositionInfo (PositionedValue _ _ e) = stripPositionInfo e-  stripPositionInfo e = e-   peelAnonAccessorChain :: Expr -> Maybe [PSString]   peelAnonAccessorChain (Accessor p e) = (p :) <$> peelAnonAccessorChain e   peelAnonAccessorChain (PositionedValue _ _ e) = peelAnonAccessorChain e   peelAnonAccessorChain AnonymousArgument = Just []   peelAnonAccessorChain _ = Nothing--  isAnonymousArgument :: Expr -> Bool-  isAnonymousArgument AnonymousArgument = True-  isAnonymousArgument (PositionedValue _ _ e) = isAnonymousArgument e-  isAnonymousArgument _ = False    freshIfAnon :: Expr -> m (Maybe Ident)   freshIfAnon u
src/Language/PureScript/Sugar/Operators.hs view
@@ -7,6 +7,7 @@ -- module Language.PureScript.Sugar.Operators   ( desugarSignedLiterals+  , RebracketCaller(..)   , rebracket   , rebracketFiltered   , checkFixityExports@@ -27,6 +28,7 @@  import Control.Monad (unless, (<=<)) import Control.Monad.Error.Class (MonadError(..))+import Control.Monad.Supply.Class (MonadSupply)  import Data.Either (partitionEithers) import Data.Foldable (for_, traverse_)@@ -67,11 +69,12 @@ rebracket   :: forall m    . MonadError MultipleErrors m+  => MonadSupply m   => [ExternsFile]   -> Module   -> m Module rebracket =-  rebracketFiltered (const True)+  rebracketFiltered CalledByCompile (const True)  -- | -- A version of `rebracket` which allows you to choose which declarations@@ -83,11 +86,13 @@ rebracketFiltered   :: forall m    . MonadError MultipleErrors m-  => (Declaration -> Bool)+  => MonadSupply m+  => RebracketCaller+  -> (Declaration -> Bool)   -> [ExternsFile]   -> Module   -> m Module-rebracketFiltered pred_ externs m = do+rebracketFiltered !caller pred_ externs m = do   let (valueFixities, typeFixities) =         partitionEithers           $ concatMap externsFixities externs@@ -101,7 +106,7 @@   let typeOpTable = customOperatorTable' typeFixities   let typeAliased = M.fromList (map makeLookupEntry typeFixities) -  rebracketModule pred_ valueOpTable typeOpTable m >>=+  rebracketModule caller pred_ valueOpTable typeOpTable m >>=     renameAliasedOperators valueAliased typeAliased    where@@ -175,22 +180,51 @@           throwError . errorMessage' pos $ UnknownName $ fmap TyOpName op     goType _ other = return other +-- | Indicates whether the `rebracketModule`+-- is being called with the full desugar pass+-- run via `purs compile` or whether+-- only the partial desguar pass is run+-- via `purs docs`.+-- This indication is needed to prevent+-- a `purs docs` error when using+-- `case _ of` syntax in a type class instance.+data RebracketCaller+  = CalledByCompile+  | CalledByDocs+  deriving (Eq, Show)+ rebracketModule   :: forall m    . (MonadError MultipleErrors m)-  => (Declaration -> Bool)+  => MonadSupply m+  => RebracketCaller+  -> (Declaration -> Bool)   -> [[(Qualified (OpName 'ValueOpName), Associativity)]]   -> [[(Qualified (OpName 'TypeOpName), Associativity)]]   -> Module   -> m Module-rebracketModule pred_ valueOpTable typeOpTable (Module ss coms mn ds exts) =+rebracketModule !caller pred_ valueOpTable typeOpTable (Module ss coms mn ds exts) =   Module ss coms mn <$> f' ds <*> pure exts   where   f' :: [Declaration] -> m [Declaration]   f' =     fmap (map (\d -> if pred_ d then removeParens d else d)) .-    flip parU (usingPredicate pred_ f)+    flip parU (usingPredicate pred_ h) +  -- | The AST will run through all the desugar passes when compiling+  -- and only some of the desugar passes when generating docs.+  -- When generating docs, `case _ of` syntax used in an instance declaration+  -- can trigger the `IncorrectAnonymousArgument` error because it does not+  -- run the same passes that the compile desguaring does. Since `purs docs`+  -- will only succeed once `purs compile` succeeds, we can ignore this check+  -- when running `purs docs`.+  -- See https://github.com/purescript/purescript/issues/4274#issuecomment-1087730651=+  -- for more info.+  h :: Declaration -> m Declaration+  h = case caller of+    CalledByDocs -> f+    CalledByCompile -> g <=< f+   (f, _, _, _, _) =       everywhereWithContextOnValuesM         ss@@ -200,6 +234,8 @@         defS         defS +  (g, _, _) = everywhereOnValuesTopDownM pure removeBinaryNoParens pure+   (goDecl, goExpr', goBinder') = updateTypes goType    goType :: SourceSpan -> SourceType -> m SourceType@@ -207,6 +243,24 @@    wrap :: (a -> m a) -> (SourceSpan, a) -> m (SourceSpan, a)   wrap go (ss', a) = (ss',) <$> go a++removeBinaryNoParens :: (MonadError MultipleErrors m, MonadSupply m) => Expr -> m Expr+removeBinaryNoParens u+  | isAnonymousArgument u = case u of+                              PositionedValue p _ _ -> rethrowWithPosition p err+                              _ -> err+                            where err = throwError . errorMessage $ IncorrectAnonymousArgument+removeBinaryNoParens (Parens (stripPositionInfo -> BinaryNoParens op l r))+  | isAnonymousArgument r = do arg <- freshIdent'+                               return $ Abs (VarBinder nullSourceSpan arg) $ App (App op l) (Var nullSourceSpan (Qualified Nothing arg))+  | isAnonymousArgument l = do arg <- freshIdent'+                               return $ Abs (VarBinder nullSourceSpan arg) $ App (App op (Var nullSourceSpan (Qualified Nothing arg))) r+removeBinaryNoParens (BinaryNoParens op l r) = return $ App (App op l) r+removeBinaryNoParens e = return e++stripPositionInfo :: Expr -> Expr+stripPositionInfo (PositionedValue _ _ e) = stripPositionInfo e+stripPositionInfo e = e  removeParens :: Declaration -> Declaration removeParens = f
src/Language/PureScript/Sugar/Operators/Expr.hs view
@@ -36,13 +36,13 @@   fromOp _ = Nothing    reapply :: SourceSpan -> Qualified (OpName 'ValueOpName) -> Expr -> Expr -> Expr-  reapply ss op t1 = App (App (Op ss op) t1)+  reapply ss = BinaryNoParens . Op ss    modOpTable     :: [[P.Operator (Chain Expr) () Identity Expr]]     -> [[P.Operator (Chain Expr) () Identity Expr]]   modOpTable table =-    [ P.Infix (P.try (parseTicks >>= \op -> return (\t1 t2 -> App (App op t1) t2))) P.AssocLeft ]+    [ P.Infix (P.try (BinaryNoParens <$> parseTicks)) P.AssocLeft ]     : table    parseTicks :: P.Parsec (Chain Expr) () Expr
src/Language/PureScript/Sugar/TypeClasses.hs view
@@ -58,6 +58,7 @@       , M.mapKeys (qualify C.PrimRow) primRowClasses       , M.mapKeys (qualify C.PrimRowList) primRowListClasses       , M.mapKeys (qualify C.PrimSymbol) primSymbolClasses+      , M.mapKeys (qualify C.PrimInt) primIntClasses       , M.mapKeys (qualify C.PrimTypeError) primTypeErrorClasses       , M.fromList (externs >>= \ExternsFile{..} -> mapMaybe (fromExternsDecl efModuleName) efDeclarations)       ]
src/Language/PureScript/Sugar/TypeClasses/Deriving.hs view
@@ -378,7 +378,7 @@     toRepTy ctors = foldr1 (\f -> srcTypeApp (srcTypeApp (srcTypeConstructor DataGenericRep.Sum) f)) ctors  checkIsWildcard :: MonadError MultipleErrors m => SourceSpan -> ProperName 'TypeName -> SourceType -> m ()-checkIsWildcard _ _ (TypeWildcard _ Nothing) = return ()+checkIsWildcard _ _ (TypeWildcard _ UnnamedWildcard) = return () checkIsWildcard ss tyConNm _ =   throwError . errorMessage' ss $ ExpectedWildcard tyConNm 
+ src/Language/PureScript/Traversals.hs view
@@ -0,0 +1,20 @@+-- | Common functions for implementing generic traversals+module Language.PureScript.Traversals where++import Prelude.Compat++sndM :: (Functor f) => (b -> f c) -> (a, b) -> f (a, c)+sndM f (a, b) = (a, ) <$> f b++thirdM :: (Functor f) => (c -> f d) -> (a, b, c) -> f (a, b, d)+thirdM f (a, b, c) = (a, b, ) <$> f c++pairM :: (Applicative f) => (a -> f c) -> (b -> f d) -> (a, b) -> f (c, d)+pairM f g (a, b)  = (,) <$> f a <*> g b++eitherM :: (Applicative f) => (a -> f c) -> (b -> f d) -> Either a b -> f (Either c d)+eitherM f _ (Left a)  = Left  <$> f a+eitherM _ g (Right b) = Right <$> g b++defS :: (Monad m) => st -> val -> m (st, val)+defS s val = return (s, val)
src/Language/PureScript/TypeChecker.hs view
@@ -14,10 +14,10 @@ import Control.Monad.Error.Class (MonadError(..)) import Control.Monad.State.Class (MonadState(..), modify, gets) import Control.Monad.Supply.Class (MonadSupply)-import Control.Monad.Writer.Class (MonadWriter(..), censor)+import Control.Monad.Writer.Class (MonadWriter, tell)  import Data.Foldable (for_, traverse_, toList)-import Data.List (nub, nubBy, (\\), sort, group, intersect)+import Data.List (nub, nubBy, (\\), sort, group) import Data.Maybe import Data.Either (partitionEithers) import Data.Text (Text)@@ -34,6 +34,7 @@ import Language.PureScript.Environment import Language.PureScript.Errors import Language.PureScript.Linter+import Language.PureScript.Linter.Wildcards import Language.PureScript.Names import Language.PureScript.Roles import Language.PureScript.Sugar.Names.Env (Exports(..))@@ -238,6 +239,7 @@   check = \case     TypeVar _ _ -> return ()     TypeLevelString _ _ -> return ()+    TypeLevelInt _ _ -> return ()     TypeConstructor _ _ -> return ()     TypeApp _ t1 t2 -> check t1 >> check t2     KindApp _ t k -> check t >> check k@@ -274,10 +276,9 @@   :: forall m    . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)   => ModuleName-  -> [DeclarationRef]   -> [Declaration]   -> m [Declaration]-typeCheckAll moduleName _ = traverse go+typeCheckAll moduleName = traverse go   where   go :: Declaration -> m Declaration   go (DataDeclaration sa@(ss, _) dtype name args dctors) = do@@ -352,7 +353,7 @@     internalError "Type declarations should have been removed before typeCheckAlld"   go (ValueDecl sa@(ss, _) name nameKind [] [MkUnguarded val]) = do     env <- getEnv-    warnAndRethrow (addHint (ErrorInValueDeclaration name) . addHint (positionedError ss)) . censorLocalUnnamedWildcards val $ do+    warnAndRethrow (addHint (ErrorInValueDeclaration name) . addHint (positionedError ss)) $ do       val' <- checkExhaustiveExpr ss env moduleName val       valueIsNotDefined moduleName name       typesOf NonRecursiveBindingGroup moduleName [((sa, name), val')] >>= \case@@ -390,7 +391,8 @@       env <- getEnv       (elabTy, kind) <- withFreshSubstitution $ do         ((unks, ty'), kind) <- kindOfWithUnknowns ty-        pure (varIfUnknown unks ty', kind)+        ty'' <- varIfUnknown unks ty'+        pure (ty'', kind)       checkTypeKind elabTy kind       case M.lookup (Qualified (Just moduleName) name) (names env) of         Just _ -> throwError . errorMessage $ RedefinedIdent name@@ -471,6 +473,7 @@     typeModule :: SourceType -> Maybe ModuleName     typeModule (TypeVar _ _) = Nothing     typeModule (TypeLevelString _ _) = Nothing+    typeModule (TypeLevelInt _ _) = Nothing     typeModule (TypeConstructor _ (Qualified (Just mn'') _)) = Just mn''     typeModule (TypeConstructor _ (Qualified Nothing _)) = internalError "Unqualified type name in findNonOrphanModules"     typeModule (TypeApp _ t1 _) = typeModule t1@@ -559,21 +562,6 @@     | moduleName `S.member` nonOrphanModules = return ()     | otherwise = throwError . errorMessage $ OrphanInstance dictName className nonOrphanModules tys' -  censorLocalUnnamedWildcards :: Expr -> m a -> m a-  censorLocalUnnamedWildcards (TypedValue _ _ ty) = censor (filterErrors (not . isLocalUnnamedWildcardError ty))-  censorLocalUnnamedWildcards _ = id--  isLocalUnnamedWildcardError :: SourceType -> ErrorMessage -> Bool-  isLocalUnnamedWildcardError ty err@(ErrorMessage _ (WildcardInferredType _ _)) =-    let-      ssWildcard (TypeWildcard (ss', _) Nothing) = [ss']-      ssWildcard _ = []-      sssWildcards = everythingOnTypes (<>) ssWildcard ty-      sss = maybe [] NEL.toList $ errorSpan err-    in-      null $ intersect sss sssWildcards-  isLocalUnnamedWildcardError _ _ = False-   -- |   -- This function adds the argument kinds for a type constructor so that they may appear in the externs file,   -- extracted from the kind of the type constructor itself.@@ -621,7 +609,7 @@   warnAndRethrow (addHint (ErrorInModule mn)) $ do     let (decls', imports) = partitionEithers $ fromImportDecl <$> decls     modify (\s -> s { checkCurrentModule = Just mn, checkCurrentModuleImports = imports })-    decls'' <- typeCheckAll mn exps decls'+    decls'' <- typeCheckAll mn $ ignoreWildcardsUnderCompleteTypeSignatures <$> decls'     checkSuperClassesAreExported <- getSuperClassExportCheck     for_ exps $ \e -> do       checkTypesAreExported e
src/Language/PureScript/TypeChecker/Entailment.hs view
@@ -18,11 +18,12 @@ import Control.Monad.Supply.Class (MonadSupply(..)) import Control.Monad.Writer +import Data.Either (lefts, partitionEithers) import Data.Foldable (for_, fold, toList) import Data.Function (on) import Data.Functor (($>))-import Data.List (findIndices, minimumBy, groupBy, nubBy, sortOn, delete)-import Data.Maybe (fromMaybe, listToMaybe, mapMaybe)+import Data.List (delete, findIndices, groupBy, minimumBy, nubBy, sortOn, tails)+import Data.Maybe (catMaybes, fromMaybe, listToMaybe, mapMaybe) import qualified Data.Map as M import qualified Data.Set as S import Data.Traversable (for)@@ -36,6 +37,7 @@ import Language.PureScript.Errors import Language.PureScript.Names import Language.PureScript.TypeChecker.Entailment.Coercible+import Language.PureScript.TypeChecker.Entailment.IntCompare import Language.PureScript.TypeChecker.Kinds (elaborateKind, unifyKinds') import Language.PureScript.TypeChecker.Monad import Language.PureScript.TypeChecker.Synonyms (replaceAllTypeSynonyms)@@ -55,9 +57,29 @@   -- | Computed instances   | WarnInstance SourceType -- ^ Warn type class with a user-defined warning message   | IsSymbolInstance PSString -- ^ The IsSymbol type class for a given Symbol literal+  | ReflectableInstance Reflectable -- ^ The Reflectable type class for a reflectable kind   | EmptyClassInstance        -- ^ For any solved type class with no members   deriving (Show, Eq) +-- | Describes kinds that are reflectable to the term-level+data Reflectable+  = ReflectableInt Integer -- ^ For type-level numbers+  | ReflectableString PSString -- ^ For type-level strings+  | ReflectableBoolean Bool -- ^ For type-level booleans+  | ReflectableOrdering Ordering -- ^ For type-level orderings+  deriving (Show, Eq)++-- | Reflect a reflectable type into an expression+asExpression :: Reflectable -> Expr+asExpression = \case+  ReflectableInt n -> Literal NullSourceSpan $ NumericLiteral $ Left n+  ReflectableString s -> Literal NullSourceSpan $ StringLiteral s+  ReflectableBoolean b -> Literal NullSourceSpan $ BooleanLiteral b+  ReflectableOrdering o -> Constructor NullSourceSpan $ case o of+    LT -> C.LT+    EQ -> C.EQ+    GT -> C.GT+ -- | Extract the identifier of a named instance namedInstanceIdentifier :: Evidence -> Maybe (Qualified Ident) namedInstanceIdentifier (NamedInstance i) = Just i@@ -180,6 +202,11 @@     forClassName _ _ C.SymbolCompare _ args | Just dicts <- solveSymbolCompare args = dicts     forClassName _ _ C.SymbolAppend _ args | Just dicts <- solveSymbolAppend args = dicts     forClassName _ _ C.SymbolCons _ args | Just dicts <- solveSymbolCons args = dicts+    forClassName _ _ C.IntAdd _ args | Just dicts <- solveIntAdd args = dicts+    forClassName _ ctx C.IntCompare _ args | Just dicts <- solveIntCompare ctx args = dicts+    forClassName _ _ C.IntMul _ args | Just dicts <- solveIntMul args = dicts+    forClassName _ _ C.IntToString _ args | Just dicts <- solveIntToString args = dicts+    forClassName _ _ C.Reflectable _ args | Just dicts <- solveReflectable args = dicts     forClassName _ _ C.RowUnion kinds args | Just dicts <- solveUnion kinds args = dicts     forClassName _ _ C.RowNub kinds args | Just dicts <- solveNub kinds args = dicts     forClassName _ _ C.RowLacks kinds args | Just dicts <- solveLacks kinds args = dicts@@ -230,22 +257,23 @@              dicts <- lift . lift $ forClassNameM env (combineContexts context inferred) className' kinds'' tys'' -            let instances = do+            let (catMaybes -> ambiguous, instances) = partitionEithers $ do                   chain <- groupBy ((==) `on` tcdChain) $                            sortOn (tcdChain &&& tcdIndex)                            dicts                   -- process instances in a chain in index order-                  let found = for chain $ \tcd ->+                  let found = for (init $ tails chain) $ \(tcd:tl) ->                                 -- Make sure the type unifies with the type in the type instance definition                                 case matches typeClassDependencies tcd tys'' of-                                  Apart        -> Right ()                  -- keep searching-                                  Match substs -> Left (Just (substs, tcd)) -- found a match-                                  Unknown      -> Left Nothing              -- can't continue with this chain yet, need proof of apartness-                  case found of-                    Right _               -> []          -- all apart-                    Left Nothing          -> []          -- last unknown-                    Left (Just substsTcd) -> [substsTcd] -- found a match-            solution <- lift . lift $ unique kinds'' tys'' instances (unknownsInAllCoveringSets tys'' typeClassCoveringSets)+                                  Apart        -> Right ()                   -- keep searching+                                  Match substs -> Left (Right (substs, tcd)) -- found a match+                                  Unknown ->+                                    if null (tcdChain tcd) || null tl+                                    then Right ()                                   -- need proof of apartness but this is either not in a chain or at the end+                                    else Left (Left (tcdToInstanceDescription tcd)) -- can't continue with this chain yet, need proof of apartness++                  lefts [found]+            solution <- lift . lift $ unique kinds'' tys'' ambiguous instances (unknownsInAllCoveringSets tys'' typeClassCoveringSets)             case solution of               Solved substs tcd -> do                 -- Note that we solved something.@@ -323,16 +351,16 @@                       (substituteType currentSubst . replaceAllTypeVars (M.toList subst) $ instKind)                       (substituteType currentSubst tyKind) -            unique :: [SourceType] -> [SourceType] -> [(a, TypeClassDict)] -> Bool -> m (EntailsResult a)-            unique kindArgs tyArgs [] unks+            unique :: [SourceType] -> [SourceType] -> [Qualified (Either SourceType Ident)] -> [(a, TypeClassDict)] -> Bool -> m (EntailsResult a)+            unique kindArgs tyArgs ambiguous [] unks               | solverDeferErrors = return Deferred               -- We need a special case for nullary type classes, since we want               -- to generalize over Partial constraints.               | solverShouldGeneralize && ((null kindArgs && null tyArgs) || any canBeGeneralized kindArgs || any canBeGeneralized tyArgs) =                   return (Unsolved (srcConstraint className' kindArgs tyArgs conInfo))-              | otherwise = throwError . errorMessage $ NoInstanceFound (srcConstraint className' kindArgs tyArgs conInfo) unks-            unique _ _ [(a, dict)] _ = return $ Solved a dict-            unique _ tyArgs tcds _+              | otherwise = throwError . errorMessage $ NoInstanceFound (srcConstraint className' kindArgs tyArgs conInfo) ambiguous unks+            unique _ _ _ [(a, dict)] _ = return $ Solved a dict+            unique _ tyArgs _ tcds _               | pairwiseAny overlapping (map snd tcds) =                   throwError . errorMessage $ OverlappingInstances className' tyArgs (tcds >>= (toList . tcdToInstanceDescription . snd))               | otherwise = return $ uncurry Solved (minimumBy (compare `on` length . tcdPath . snd) tcds)@@ -387,6 +415,9 @@             mkDictionary (IsSymbolInstance sym) _ =               let fields = [ ("reflectSymbol", Abs (VarBinder nullSourceSpan UnusedIdent) (Literal nullSourceSpan (StringLiteral sym))) ] in               return $ App (Constructor nullSourceSpan (coerceProperName . dictTypeName <$> C.IsSymbol)) (Literal nullSourceSpan (ObjectLiteral fields))+            mkDictionary (ReflectableInstance ref) _ =+              let fields = [ ("reflectType", Abs (VarBinder nullSourceSpan UnusedIdent) (asExpression ref)) ] in+              pure $ App (Constructor nullSourceSpan (coerceProperName . dictTypeName <$> C.Reflectable)) (Literal nullSourceSpan (ObjectLiteral fields))              unknownsInAllCoveringSets :: [SourceType] -> S.Set (S.Set Int) -> Bool             unknownsInAllCoveringSets tyArgs = all (\s -> any (`S.member` s) unkIndices)@@ -475,6 +506,73 @@       pure (arg1, arg2, srcTypeLevelString (mkString $ h' <> t'))     consSymbol _ _ _ = Nothing +    solveIntToString :: [SourceType] -> Maybe [TypeClassDict]+    solveIntToString [arg0, _] = do+      (arg0', arg1') <- printIntToString arg0+      let args' = [arg0', arg1']+      pure [TypeClassDictionaryInScope Nothing 0 EmptyClassInstance [] C.IntToString [] [] args' Nothing Nothing]+    solveIntToString _ = Nothing++    printIntToString :: SourceType -> Maybe (SourceType, SourceType)+    printIntToString arg0@(TypeLevelInt _ i) = do+      pure (arg0, srcTypeLevelString $ mkString $ T.pack $ show i)+    printIntToString _ = Nothing++    solveReflectable :: [SourceType] -> Maybe [TypeClassDict]+    solveReflectable [typeLevel, _] = do+      (ref, typ) <- case typeLevel of+        TypeLevelInt _ i -> pure (ReflectableInt i, tyInt)+        TypeLevelString _ s -> pure (ReflectableString s, tyString)+        TypeConstructor _ n+          | n == C.booleanTrue -> pure (ReflectableBoolean True, tyBoolean)+          | n == C.booleanFalse -> pure (ReflectableBoolean False, tyBoolean)+          | n == C.orderingLT -> pure (ReflectableOrdering LT, srcTypeConstructor C.Ordering)+          | n == C.orderingEQ -> pure (ReflectableOrdering EQ, srcTypeConstructor C.Ordering)+          | n == C.orderingGT -> pure (ReflectableOrdering GT, srcTypeConstructor C.Ordering)+        _ -> Nothing+      pure [TypeClassDictionaryInScope Nothing 0 (ReflectableInstance ref) [] C.Reflectable [] [] [typeLevel, typ] Nothing Nothing]+    solveReflectable _ = Nothing++    solveIntAdd :: [SourceType] -> Maybe [TypeClassDict]+    solveIntAdd [arg0, arg1, arg2] = do+      (arg0', arg1', arg2') <- addInts arg0 arg1 arg2+      let args' = [arg0', arg1', arg2']+      pure [TypeClassDictionaryInScope Nothing 0 EmptyClassInstance [] C.IntAdd [] [] args' Nothing Nothing]+    solveIntAdd _ = Nothing++    addInts :: SourceType -> SourceType -> SourceType -> Maybe (SourceType, SourceType, SourceType)+    -- | l r -> o, l + r = o+    addInts arg0@(TypeLevelInt _ l) arg1@(TypeLevelInt _ r) _ = pure (arg0, arg1, srcTypeLevelInt (l + r))+    -- | l o -> r, o - l = r+    addInts arg0@(TypeLevelInt _ l) _ arg2@(TypeLevelInt _ o) = pure (arg0, srcTypeLevelInt (o - l), arg2)+    -- | r o -> l, o - r = l+    addInts _ arg1@(TypeLevelInt _ r) arg2@(TypeLevelInt _ o) = pure (srcTypeLevelInt (o - r), arg1, arg2)+    addInts _ _ _                                             = Nothing++    solveIntCompare :: InstanceContext -> [SourceType] -> Maybe [TypeClassDict]+    solveIntCompare _ [arg0@(TypeLevelInt _ a), arg1@(TypeLevelInt _ b), _] =+      let ordering = case compare a b of+            EQ -> C.orderingEQ+            LT -> C.orderingLT+            GT -> C.orderingGT+          args' = [arg0, arg1, srcTypeConstructor ordering]+      in pure [TypeClassDictionaryInScope Nothing 0 EmptyClassInstance [] C.IntCompare [] [] args' Nothing Nothing]+    solveIntCompare ctx args@[a, b, _] = do+      let compareDictsInScope = findDicts ctx C.IntCompare Nothing+          givens = flip mapMaybe compareDictsInScope $ \case+            dict | [a', b', c'] <- tcdInstanceTypes dict -> mkRelation a' b' c'+                 | otherwise -> Nothing+          facts = mkFacts (args : (tcdInstanceTypes <$> compareDictsInScope))+      c' <- solveRelation (givens <> facts) a b+      pure [TypeClassDictionaryInScope Nothing 0 EmptyClassInstance [] C.IntCompare [] [] [a, b, srcTypeConstructor c'] Nothing Nothing]+    solveIntCompare _ _ = Nothing++    solveIntMul :: [SourceType] -> Maybe [TypeClassDict]+    solveIntMul [arg0@(TypeLevelInt _ l), arg1@(TypeLevelInt _ r), _] =+      let args' = [arg0, arg1, srcTypeLevelInt (l * r)]+      in pure [TypeClassDictionaryInScope Nothing 0 EmptyClassInstance [] C.IntMul [] [] args' Nothing Nothing]+    solveIntMul _ = Nothing+     solveUnion :: [SourceType] -> [SourceType] -> Maybe [TypeClassDict]     solveUnion kinds [l, r, u] = do       (lOut, rOut, uOut, cst, vars) <- unionRows kinds l r u@@ -641,6 +739,7 @@     typeHeadsAreEqual t                      (TypeVar _ v)                     = (Match (), M.singleton v [t])     typeHeadsAreEqual (TypeConstructor _ c1) (TypeConstructor _ c2) | c1 == c2 = (Match (), M.empty)     typeHeadsAreEqual (TypeLevelString _ s1) (TypeLevelString _ s2) | s1 == s2 = (Match (), M.empty)+    typeHeadsAreEqual (TypeLevelInt _ n1)    (TypeLevelInt _ n2)    | n1 == n2 = (Match (), M.empty)     typeHeadsAreEqual (TypeApp _ h1 t1)      (TypeApp _ h2 t2)                 =       both (typeHeadsAreEqual h1 h2) (typeHeadsAreEqual t1 t2)     typeHeadsAreEqual (KindApp _ h1 t1)      (KindApp _ h2 t2)                 =@@ -663,6 +762,7 @@         go (sd, r)                 ([], TypeVar _ v)                   = (Match (), M.singleton v [rowFromList (sd, r)])         go _ _                                                         = (Apart, M.empty)     typeHeadsAreEqual (TUnknown _ _) _ = (Unknown, M.empty)+    typeHeadsAreEqual Skolem{} _       = (Unknown, M.empty)     typeHeadsAreEqual _ _ = (Apart, M.empty)      both :: (Matched (), Matching [Type a]) -> (Matched (), Matching [Type a]) -> (Matched (), Matching [Type a])@@ -680,11 +780,14 @@       typesAreEqual (KindedType _ t1 _)    t2                     = typesAreEqual t1 t2       typesAreEqual t1                     (KindedType _ t2 _)    = typesAreEqual t1 t2       typesAreEqual (TUnknown _ u1)        (TUnknown _ u2)        | u1 == u2 = Match ()-      typesAreEqual (Skolem _ _ _ s1 _)      (Skolem _ _ _ s2 _)      | s1 == s2 = Match ()-      typesAreEqual (Skolem _ _ _ _ _)       _                      = Unknown-      typesAreEqual _                      (Skolem _ _ _ _ _)       = Unknown+      typesAreEqual (TUnknown _ u1)        t2                     = if t2 `containsUnknown` u1 then Apart else Unknown+      typesAreEqual t1                     (TUnknown _ u2)        = if t1 `containsUnknown` u2 then Apart else Unknown+      typesAreEqual (Skolem _ _ _ s1 _)    (Skolem _ _ _ s2 _)    | s1 == s2 = Match ()+      typesAreEqual (Skolem _ _ _ s1 _)    t2                     = if t2 `containsSkolem` s1 then Apart else Unknown+      typesAreEqual t1                     (Skolem _ _ _ s2 _)    = if t1 `containsSkolem` s2 then Apart else Unknown       typesAreEqual (TypeVar _ v1)         (TypeVar _ v2)         | v1 == v2 = Match ()       typesAreEqual (TypeLevelString _ s1) (TypeLevelString _ s2) | s1 == s2 = Match ()+      typesAreEqual (TypeLevelInt _ n1)    (TypeLevelInt _ n2)    | n1 == n2 = Match ()       typesAreEqual (TypeConstructor _ c1) (TypeConstructor _ c2) | c1 == c2 = Match ()       typesAreEqual (TypeApp _ h1 t1)      (TypeApp _ h2 t2)      = typesAreEqual h1 h2 <> typesAreEqual t1 t2       typesAreEqual (KindApp _ h1 t1)      (KindApp _ h2 t2)      = typesAreEqual h1 h2 <> typesAreEqual t1 t2@@ -698,6 +801,8 @@           go (l, t1)                (r, KindedType _ t2 _)            = go (l, t1) (r, t2)           go ([], KindApp _ t1 k1)  ([], KindApp _ t2 k2)             = typesAreEqual t1 t2 <> typesAreEqual k1 k2           go ([], TUnknown _ u1)    ([], TUnknown _ u2)    | u1 == u2 = Match ()+          go ([], TUnknown _ _)     ([], _)                           = Unknown+          go ([], _)                ([], TUnknown _ _)                = Unknown           go ([], Skolem _ _ _ s1 _)  ([], Skolem _ _ _ s2 _)  | s1 == s2 = Match ()           go ([], Skolem _ _ _ _ _)   _                               = Unknown           go _                      ([], Skolem _ _ _ _ _)            = Unknown@@ -709,6 +814,12 @@       isRCons :: Type a -> Bool       isRCons RCons{}    = True       isRCons _          = False++      containsSkolem :: Type a -> Int -> Bool+      containsSkolem t s = everythingOnTypes (||) (\case Skolem _ _ _ s' _ -> s == s'; _ -> False) t++      containsUnknown :: Type a -> Int -> Bool+      containsUnknown t u = everythingOnTypes (||) (\case TUnknown _ u' -> u == u'; _ -> False) t  -- | Add a dictionary for the constraint to the scope, and dictionaries -- for all implied superclass instances.
src/Language/PureScript/TypeChecker/Entailment/Coercible.hs view
@@ -527,7 +527,7 @@   -> SourceType   -> MultipleErrors insoluble k a b =-  errorMessage $ NoInstanceFound (srcConstraint Prim.Coercible [k] [a, b] Nothing) (any containsUnknowns [a, b])+  errorMessage $ NoInstanceFound (srcConstraint Prim.Coercible [k] [a, b] Nothing) [] (any containsUnknowns [a, b])  -- | Constraints of the form @Coercible a b@ can be solved if the two arguments -- are the same. Since we currently don't support higher-rank arguments in
+ src/Language/PureScript/TypeChecker/Entailment/IntCompare.hs view
@@ -0,0 +1,102 @@+-- |+-- Graph-based solver for comparing type-level numbers with respect to+-- reflexivity, symmetry, and transitivity properties.+--+module Language.PureScript.TypeChecker.Entailment.IntCompare where++import Protolude++import qualified Data.Graph as G+import qualified Data.Map as M++import qualified Language.PureScript.Names as P+import qualified Language.PureScript.Types as P+import qualified Language.PureScript.Constants.Prim as P++data Relation a+  = Equal a a+  | LessThan a a+  deriving (Functor, Show, Eq, Ord)++type Context a = [Relation a]++type PSOrdering = P.Qualified (P.ProperName 'P.TypeName)++-- Commentary:+--+-- In essence, this solver builds a directed graph using the provided+-- context, which is then used to determine the relationship between+-- the two elements being compared.+--+-- Given the context [a < b, b < c], we can infer that a < c as a+-- path exists from a to c. Likewise, we can also infer that c > a+-- as a path exists from c to a.+--+-- ╔═══╗    ╔═══╗    ╔═══╗+-- ║ a ║ -> ║ b ║ -> ║ c ║+-- ╚═══╝    ╚═══╝    ╚═══╝+--+-- Introducing equality to the context augments the graph further,+-- and it is represented by creating cycles between equal nodes.+-- For example, [a < b, b < c, c = d] yields the following graph:+--+-- ╔═══╗    ╔═══╗    ╔═══╗     ╔═══╗+-- ║ a ║ -> ║ b ║ -> ║ c ║ <-> ║ d ║+-- ╚═══╝    ╚═══╝    ╚═══╝     ╚═══╝+solveRelation :: forall a. Ord a => Context a -> a -> a -> Maybe PSOrdering+solveRelation context lhs rhs =+  if lhs == rhs then+    pure P.orderingEQ+  else do+    let (graph, search) = inequalities+    lhs' <- search lhs+    rhs' <- search rhs+    case (G.path graph lhs' rhs', G.path graph rhs' lhs') of+      (True, True) ->+        pure P.orderingEQ+      (True, False) ->+        pure P.orderingLT+      (False, True) ->+        pure P.orderingGT+      _ ->+        Nothing+  where+  inequalities :: (G.Graph, a -> Maybe G.Vertex)+  inequalities = makeGraph $ clean $ foldMap convert context+    where+    convert :: Relation a -> [(a, [a])]+    convert (Equal a b)    = [(a, [b]), (b, [a])]+    convert (LessThan a b) = [(a, [b]), (b, [])]++    makeGraph :: [(a, [a])] -> (G.Graph, a -> Maybe G.Vertex)+    makeGraph m =+      case G.graphFromEdges $ (\(a, b) -> (a, a, b)) <$> m of+        (g, _, f) -> (g, f)++    clean :: forall k. Ord k => [(k, [k])] -> [(k, [k])]+    clean = M.toList . M.fromListWith (<>)++mkRelation :: P.Type a -> P.Type a -> P.Type a -> Maybe (Relation (P.Type a))+mkRelation lhs rhs rel = case rel of+  P.TypeConstructor _ ordering+    | ordering == P.orderingEQ -> pure $ Equal lhs rhs+    | ordering == P.orderingLT -> pure $ LessThan lhs rhs+    | ordering == P.orderingGT -> pure $ LessThan rhs lhs+  _ ->+    Nothing++mkFacts :: [[P.Type a]] -> [Relation (P.Type a)]+mkFacts = mkRels [] . sort . findFacts+  where+  mkRels a [] = concat a+  mkRels a (x : xs) = mkRels (map (LessThan x) xs : a) xs++  findFacts = mapMaybe $ \case+    [P.TypeLevelInt _ _, P.TypeLevelInt _ _, _] ->+      Nothing+    [i@(P.TypeLevelInt _ _), _, _] ->+      Just i+    [_, i@(P.TypeLevelInt _ _), _] ->+      Just i+    _ ->+      Nothing
src/Language/PureScript/TypeChecker/Kinds.hs view
@@ -185,6 +185,8 @@       pure (ConstrainedType ann' con'' ty', E.kindType $> ann')     ty@(TypeLevelString ann _) ->       pure (ty, E.kindSymbol $> ann)+    ty@(TypeLevelInt ann _) ->+      pure (ty, E.tyInt $> ann)     ty@(TypeVar ann v) -> do       moduleName <- unsafeCheckCurrentModule       kind <- apply =<< lookupTypeVariable moduleName (Qualified Nothing $ ProperName v)@@ -486,6 +488,8 @@ elaborateKind = \case   TypeLevelString ann _ ->     pure $ E.kindSymbol $> ann+  TypeLevelInt ann _ ->+    pure $ E.tyInt $> ann   TypeConstructor ann v -> do     env <- getEnv     case M.lookup v (E.types env) of
src/Language/PureScript/TypeChecker/Monad.hs view
@@ -49,11 +49,26 @@   -- ^ Type substitution   , substUnsolved :: M.Map Int (UnkLevel, SourceType)   -- ^ Unsolved unification variables with their level (scope ordering) and kind+  , substNames :: M.Map Int Text+  -- ^ The original names of unknowns   } +insertUnkName :: (MonadState CheckState m) => Unknown -> Text -> m ()+insertUnkName u t = do+  modify (\s ->+            s { checkSubstitution =+                  (checkSubstitution s) { substNames =+                                            M.insert u t $ substNames $ checkSubstitution s+                                        }+              }+         )++lookupUnkName :: (MonadState CheckState m) => Unknown -> m (Maybe Text)+lookupUnkName u = gets $ M.lookup u . substNames . checkSubstitution+ -- | An empty substitution emptySubstitution :: Substitution-emptySubstitution = Substitution M.empty M.empty+emptySubstitution = Substitution M.empty M.empty M.empty  -- | State required for type checking data CheckState = CheckState@@ -445,8 +460,12 @@ debugValue = init . render . prettyPrintValue 100  debugSubstitution :: Substitution -> [String]-debugSubstitution (Substitution solved unsolved) =-  fmap go1 (M.toList solved) <> fmap go2 (M.toList unsolved')+debugSubstitution (Substitution solved unsolved names) =+  concat+    [ fmap go1 (M.toList solved)+    , fmap go2 (M.toList unsolved')+    , fmap go3 (M.toList names)+    ]   where   unsolved' =     M.filterWithKey (\k _ -> M.notMember k solved) unsolved@@ -456,3 +475,6 @@    go2 (u, (_, k)) =     "?" <> show u <> " :: " <> debugType k++  go3 (u, t) =+    unpack t <> show u
src/Language/PureScript/TypeChecker/TypeSearch.hs view
@@ -123,8 +123,11 @@     matchingNames = runTypeSearch (Map.map (\(ty, _, _) -> ty) (P.names env))     matchingConstructors = runTypeSearch (Map.map (\(_, _, ty, _) -> ty) (P.dataConstructors env))     (allLabels, matchingLabels) = accessorSearch unsolved env st type'++    runPlainIdent (Qualified m (Ident k), v) = Just (Qualified m k, v)+    runPlainIdent _ = Nothing   in     ( (first (P.Qualified Nothing . ("_." <>) . P.prettyPrintLabel) <$> matchingLabels)-      <> (first (map P.runIdent) <$> Map.toList matchingNames)+      <> mapMaybe runPlainIdent (Map.toList matchingNames)       <> (first (map P.runProperName) <$> Map.toList matchingConstructors)     , if null allLabels then Nothing else Just allLabels)
src/Language/PureScript/TypeChecker/Types.hs view
@@ -105,8 +105,9 @@           ty'' = constrain unsolved ty'       unsolvedTypeVarsWithKinds <- unknownsWithKinds . IS.toList . unknowns $ constrain unsolved ty''       let unsolvedTypeVars = IS.toList $ unknowns ty'-          generalized = varIfUnknown unsolvedTypeVarsWithKinds ty'' +      generalized <- varIfUnknown unsolvedTypeVarsWithKinds ty''+       when shouldGeneralize $ do         -- Show the inferred type in a warning         tell@@ -162,11 +163,15 @@         let constraintTypeVars = fold (conData >>= snd)         let solved = solveFrom determinedFromType         let unsolvedVars = S.difference constraintTypeVars solved+        let lookupUnkName' i = do+              mn <- lookupUnkName i+              pure (fromMaybe "t" mn, i)+        unsolvedVarNames <- traverse lookupUnkName' (S.toList unsolvedVars)         unless (S.null unsolvedVars) .           throwError             . onErrorMessages (replaceTypes currentSubst)             . errorMessage' ss-            $ AmbiguousTypeVariables generalized (S.toList unsolvedVars)+            $ AmbiguousTypeVariables generalized unsolvedVarNames        -- Check skolem variables did not escape their scope       skolemEscapeCheck val'@@ -322,6 +327,7 @@   -> m (Expr, SourceType) instantiatePolyTypeWithUnknowns val (ForAll _ ident mbK ty _) = do   u <- maybe (internalCompilerError "Unelaborated forall") freshTypeWithKind mbK+  insertUnkName' u ident   instantiatePolyTypeWithUnknowns val $ replaceTypeVars ident u ty instantiatePolyTypeWithUnknowns val (ConstrainedType _ con ty) = do   dicts <- getTypeClassDictionaries@@ -329,6 +335,11 @@   instantiatePolyTypeWithUnknowns (App val (TypeClassDictionary con dicts hints)) ty instantiatePolyTypeWithUnknowns val ty = return (val, ty) +-- | Match against TUnknown and call insertUnkName, failing otherwise.+insertUnkName' :: (MonadState CheckState m, MonadError MultipleErrors m) => SourceType -> Text -> m ()+insertUnkName' (TUnknown _ i) n = insertUnkName i n+insertUnkName' _ _ = internalCompilerError "type is not TUnknown"+ -- | Infer a type for a value, rethrowing any error to provide a more useful error message infer   :: (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)@@ -876,6 +887,7 @@   return (retTy, App fn arg') checkFunctionApplication' fn (ForAll _ ident mbK ty _) arg = do   u <- maybe (internalCompilerError "Unelaborated forall") freshTypeWithKind mbK+  insertUnkName' u ident   let replaced = replaceTypeVars ident u ty   checkFunctionApplication fn replaced arg checkFunctionApplication' fn (KindedType _ ty _) arg =
src/Language/PureScript/TypeChecker/Unify.hs view
@@ -22,6 +22,7 @@ import Control.Monad.Writer.Class (MonadWriter(..))  import Data.Foldable (traverse_)+import Data.Maybe (fromMaybe) import qualified Data.Map as M import qualified Data.Text as T @@ -131,6 +132,7 @@   unifyTypes' ty1@(TypeConstructor _ c1) ty2@(TypeConstructor _ c2) =     guardWith (errorMessage (TypesDoNotUnify ty1 ty2)) (c1 == c2)   unifyTypes' (TypeLevelString _ s1) (TypeLevelString _ s2) | s1 == s2 = return ()+  unifyTypes' (TypeLevelInt    _ n1) (TypeLevelInt    _ n2) | n1 == n2 = return ()   unifyTypes' (TypeApp _ t3 t4) (TypeApp _ t5 t6) = do     t3 `unifyTypes` t5     t4 `unifyTypes` t6@@ -183,24 +185,37 @@ replaceTypeWildcards :: (MonadWriter MultipleErrors m, MonadState CheckState m) => SourceType -> m SourceType replaceTypeWildcards = everywhereOnTypesM replace   where-  replace (TypeWildcard ann name) = do+  replace (TypeWildcard ann wdata) = do     t <- freshType     ctx <- getLocalContext-    let err = maybe (WildcardInferredType t ctx) (\n -> HoleInferredType n t ctx Nothing) name-    warnWithPosition (fst ann) $ tell $ errorMessage err+    let err = case wdata of+          HoleWildcard n -> Just $ HoleInferredType n t ctx Nothing+          UnnamedWildcard -> Just $ WildcardInferredType t ctx+          IgnoredWildcard -> Nothing+    forM_ err $ warnWithPosition (fst ann) . tell . errorMessage     return t   replace other = return other  -- | -- Replace outermost unsolved unification variables with named type variables ---varIfUnknown :: [(Unknown, SourceType)] -> SourceType -> SourceType-varIfUnknown unks ty =-  mkForAll (toBinding <$> unks) $ go ty+varIfUnknown :: forall m. (MonadState CheckState m) => [(Unknown, SourceType)] -> SourceType -> m SourceType+varIfUnknown unks ty = do+  bn' <- traverse toBinding unks+  ty' <- go ty+  pure $ mkForAll bn' ty'   where-  toName = T.cons 't' . T.pack .  show-  toBinding (a, k) = (getAnnForType ty, (toName a, Just $ go k))-  go = everywhereOnTypes $ \case-    (TUnknown ann u)-      | Just _ <- lookup u unks -> TypeVar ann (toName u)-    t -> t+  toName :: Unknown -> m T.Text+  toName u = (<> T.pack (show u)) . fromMaybe "t" <$> lookupUnkName u++  toBinding :: (Unknown, SourceType) -> m (SourceAnn, (T.Text, Maybe SourceType))+  toBinding (u, k) = do+    u' <- toName u+    k' <- go k+    pure (getAnnForType ty, (u', Just k'))++  go :: SourceType -> m SourceType+  go = everywhereOnTypesM $ \case+    (TUnknown ann u) ->+      TypeVar ann <$> toName u+    t -> pure t
+ src/Language/PureScript/TypeClassDictionaries.hs view
@@ -0,0 +1,49 @@+module Language.PureScript.TypeClassDictionaries where++import Prelude.Compat++import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Text (Text, pack)++import Language.PureScript.AST.Declarations.ChainId (ChainId)+import Language.PureScript.Names+import Language.PureScript.Types++--+-- Data representing a type class dictionary which is in scope+--+data TypeClassDictionaryInScope v+  = TypeClassDictionaryInScope {+    -- | The instance chain+      tcdChain :: Maybe ChainId+    -- | Index of the instance chain+    , tcdIndex :: Integer+    -- | The value with which the dictionary can be accessed at runtime+    , tcdValue :: v+    -- | How to obtain this instance via superclass relationships+    , tcdPath :: [(Qualified (ProperName 'ClassName), Integer)]+    -- | The name of the type class to which this type class instance applies+    , tcdClassName :: Qualified (ProperName 'ClassName)+    -- | Quantification of type variables in the instance head and dependencies+    , tcdForAll :: [(Text, SourceType)]+    -- | The kinds to which this type class instance applies+    , tcdInstanceKinds :: [SourceType]+    -- | The types to which this type class instance applies+    , tcdInstanceTypes :: [SourceType]+    -- | Type class dependencies which must be satisfied to construct this dictionary+    , tcdDependencies :: Maybe [SourceConstraint]+    -- | If this instance was unnamed, the type to use when describing it in+    -- error messages+    , tcdDescription :: Maybe SourceType+    }+    deriving (Show, Functor, Foldable, Traversable, Generic)++instance NFData v => NFData (TypeClassDictionaryInScope v)++type NamedDict = TypeClassDictionaryInScope (Qualified Ident)++-- | Generate a name for a superclass reference which can be used in+-- generated code.+superclassName :: Qualified (ProperName 'ClassName) -> Integer -> Text+superclassName pn index = runProperName (disqualify pn) <> pack (show index)
+ src/Language/PureScript/Types.hs view
@@ -0,0 +1,793 @@+-- |+-- Data types for types+--+module Language.PureScript.Types where++import Prelude.Compat+import Protolude (ordNub)++import Codec.Serialise (Serialise)+import Control.Applicative ((<|>))+import Control.Arrow (first, second)+import Control.DeepSeq (NFData)+import Control.Monad ((<=<), (>=>))+import Data.Aeson ((.:), (.:?), (.!=), (.=))+import qualified Data.Aeson as A+import qualified Data.Aeson.Types as A+import Data.Foldable (fold, foldl')+import qualified Data.IntSet as IS+import Data.List (sort, sortOn)+import Data.Maybe (fromMaybe, isJust)+import Data.Text (Text)+import qualified Data.Text as T+import GHC.Generics (Generic)++import Language.PureScript.AST.SourcePos+import qualified Language.PureScript.Constants.Prim as C+import Language.PureScript.Names+import Language.PureScript.Label (Label)+import Language.PureScript.PSString (PSString)++import Lens.Micro (Lens', (^.), set)++type SourceType = Type SourceAnn+type SourceConstraint = Constraint SourceAnn++-- |+-- An identifier for the scope of a skolem variable+--+newtype SkolemScope = SkolemScope { runSkolemScope :: Int }+  deriving (Show, Eq, Ord, A.ToJSON, A.FromJSON, Generic)++instance NFData SkolemScope+instance Serialise SkolemScope++-- |+-- Describes how a TypeWildcard should be presented to the user during+-- type checking: holes (?foo) are always emitted as errors, whereas unnamed+-- wildcards (_) default to warnings, but are ignored entirely if they are+-- contained by a binding with a complete (wildcard-free) type signature.+--+data WildcardData = HoleWildcard Text | UnnamedWildcard | IgnoredWildcard+  deriving (Show, Eq, Ord, Generic)++instance NFData WildcardData+instance Serialise WildcardData++-- |+-- The type of types+--+data Type a+  -- | A unification variable of type Type+  = TUnknown a Int+  -- | A named type variable+  | TypeVar a Text+  -- | A type-level string+  | TypeLevelString a PSString+  -- | A type-level natural+  | TypeLevelInt a Integer+  -- | A type wildcard, as would appear in a partial type synonym+  | TypeWildcard a WildcardData+  -- | A type constructor+  | TypeConstructor a (Qualified (ProperName 'TypeName))+  -- | A type operator. This will be desugared into a type constructor during the+  -- "operators" phase of desugaring.+  | TypeOp a (Qualified (OpName 'TypeOpName))+  -- | A type application+  | TypeApp a (Type a) (Type a)+  -- | Explicit kind application+  | KindApp a (Type a) (Type a)+  -- | Forall quantifier+  | ForAll a Text (Maybe (Type a)) (Type a) (Maybe SkolemScope)+  -- | A type with a set of type class constraints+  | ConstrainedType a (Constraint a) (Type a)+  -- | A skolem constant+  | Skolem a Text (Maybe (Type a)) Int SkolemScope+  -- | An empty row+  | REmpty a+  -- | A non-empty row+  | RCons a Label (Type a) (Type a)+  -- | A type with a kind annotation+  | KindedType a (Type a) (Type a)+  -- | Binary operator application. During the rebracketing phase of desugaring,+  -- this data constructor will be removed.+  | BinaryNoParensType a (Type a) (Type a) (Type a)+  -- | Explicit parentheses. During the rebracketing phase of desugaring, this+  -- data constructor will be removed.+  --+  -- Note: although it seems this constructor is not used, it _is_ useful,+  -- since it prevents certain traversals from matching.+  | ParensInType a (Type a)+  deriving (Show, Generic, Functor, Foldable, Traversable)++instance NFData a => NFData (Type a)+instance Serialise a => Serialise (Type a)++srcTUnknown :: Int -> SourceType+srcTUnknown = TUnknown NullSourceAnn++srcTypeVar :: Text -> SourceType+srcTypeVar = TypeVar NullSourceAnn++srcTypeLevelString :: PSString -> SourceType+srcTypeLevelString = TypeLevelString NullSourceAnn++srcTypeLevelInt :: Integer -> SourceType+srcTypeLevelInt = TypeLevelInt NullSourceAnn++srcTypeWildcard :: SourceType+srcTypeWildcard = TypeWildcard NullSourceAnn UnnamedWildcard++srcTypeConstructor :: Qualified (ProperName 'TypeName) -> SourceType+srcTypeConstructor = TypeConstructor NullSourceAnn++srcTypeApp :: SourceType -> SourceType -> SourceType+srcTypeApp = TypeApp NullSourceAnn++srcKindApp :: SourceType -> SourceType -> SourceType+srcKindApp = KindApp NullSourceAnn++srcForAll :: Text -> Maybe SourceType -> SourceType -> Maybe SkolemScope -> SourceType+srcForAll = ForAll NullSourceAnn++srcConstrainedType :: SourceConstraint -> SourceType -> SourceType+srcConstrainedType = ConstrainedType NullSourceAnn++srcREmpty :: SourceType+srcREmpty = REmpty NullSourceAnn++srcRCons :: Label -> SourceType -> SourceType -> SourceType+srcRCons = RCons NullSourceAnn++srcKindedType :: SourceType -> SourceType -> SourceType+srcKindedType = KindedType NullSourceAnn++pattern REmptyKinded :: forall a. a -> Maybe (Type a) -> Type a+pattern REmptyKinded ann mbK <- (toREmptyKinded -> Just (ann, mbK))++toREmptyKinded :: forall a. Type a -> Maybe (a, Maybe (Type a))+toREmptyKinded (REmpty ann) = Just (ann, Nothing)+toREmptyKinded (KindApp _ (REmpty ann) k) = Just (ann, Just k)+toREmptyKinded _ = Nothing++isREmpty :: forall a. Type a -> Bool+isREmpty = isJust . toREmptyKinded++-- | Additional data relevant to type class constraints+data ConstraintData+  = PartialConstraintData [[Text]] Bool+  -- ^ Data to accompany a Partial constraint generated by the exhaustivity checker.+  -- It contains (rendered) binder information for those binders which were+  -- not matched, and a flag indicating whether the list was truncated or not.+  -- Note: we use 'Text' here because using 'Binder' would introduce a cyclic+  -- dependency in the module graph.+  deriving (Show, Eq, Ord, Generic)++instance NFData ConstraintData+instance Serialise ConstraintData++-- | A typeclass constraint+data Constraint a = Constraint+  { constraintAnn :: a+  -- ^ constraint annotation+  , constraintClass :: Qualified (ProperName 'ClassName)+  -- ^ constraint class name+  , constraintKindArgs :: [Type a]+  -- ^ kind arguments+  , constraintArgs  :: [Type a]+  -- ^ type arguments+  , constraintData  :: Maybe ConstraintData+  -- ^ additional data relevant to this constraint+  } deriving (Show, Generic, Functor, Foldable, Traversable)++instance NFData a => NFData (Constraint a)+instance Serialise a => Serialise (Constraint a)++srcConstraint :: Qualified (ProperName 'ClassName) -> [SourceType] -> [SourceType] -> Maybe ConstraintData -> SourceConstraint+srcConstraint = Constraint NullSourceAnn++mapConstraintArgs :: ([Type a] -> [Type a]) -> Constraint a -> Constraint a+mapConstraintArgs f c = c { constraintArgs = f (constraintArgs c) }++overConstraintArgs :: Functor f => ([Type a] -> f [Type a]) -> Constraint a -> f (Constraint a)+overConstraintArgs f c = (\args -> c { constraintArgs = args }) <$> f (constraintArgs c)++mapConstraintArgsAll :: ([Type a] -> [Type a]) -> Constraint a -> Constraint a+mapConstraintArgsAll f c =+  c { constraintKindArgs = f (constraintKindArgs c)+    , constraintArgs = f (constraintArgs c)+    }++overConstraintArgsAll :: Applicative f => ([Type a] -> f [Type a]) -> Constraint a -> f (Constraint a)+overConstraintArgsAll f c =+  (\a b -> c { constraintKindArgs = a, constraintArgs = b })+    <$> f (constraintKindArgs c)+    <*> f (constraintArgs c)++constraintDataToJSON :: ConstraintData -> A.Value+constraintDataToJSON (PartialConstraintData bs trunc) =+  A.object+    [ "contents" .= (bs, trunc)+    ]++constraintToJSON :: (a -> A.Value) -> Constraint a -> A.Value+constraintToJSON annToJSON Constraint {..} =+  A.object+    [ "constraintAnn"   .= annToJSON constraintAnn+    , "constraintClass" .= constraintClass+    , "constraintKindArgs"  .= fmap (typeToJSON annToJSON) constraintKindArgs+    , "constraintArgs"  .= fmap (typeToJSON annToJSON) constraintArgs+    , "constraintData"  .= fmap constraintDataToJSON constraintData+    ]++typeToJSON :: forall a. (a -> A.Value) -> Type a -> A.Value+typeToJSON annToJSON ty =+  case ty of+    TUnknown a b ->+      variant "TUnknown" a b+    TypeVar a b ->+      variant "TypeVar" a b+    TypeLevelString a b ->+      variant "TypeLevelString" a b+    TypeLevelInt a b ->+      variant "TypeLevelInt" a b+    TypeWildcard a b ->+      variant "TypeWildcard" a b+    TypeConstructor a b ->+      variant "TypeConstructor" a b+    TypeOp a b ->+      variant "TypeOp" a b+    TypeApp a b c ->+      variant "TypeApp" a (go b, go c)+    KindApp a b c ->+      variant "KindApp" a (go b, go c)+    ForAll a b c d e ->+      case c of+        Nothing -> variant "ForAll" a (b, go d, e)+        Just k -> variant "ForAll" a (b, go k, go d, e)+    ConstrainedType a b c ->+      variant "ConstrainedType" a (constraintToJSON annToJSON b, go c)+    Skolem a b c d e ->+      variant "Skolem" a (b, go <$> c, d, e)+    REmpty a ->+      nullary "REmpty" a+    RCons a b c d ->+      variant "RCons" a (b, go c, go d)+    KindedType a b c ->+      variant "KindedType" a (go b, go c)+    BinaryNoParensType a b c d ->+      variant "BinaryNoParensType" a (go b, go c, go d)+    ParensInType a b ->+      variant "ParensInType" a (go b)+  where+  go :: Type a -> A.Value+  go = typeToJSON annToJSON++  variant :: A.ToJSON b => String -> a -> b -> A.Value+  variant tag ann contents =+    A.object+      [ "tag"        .= tag+      , "annotation" .= annToJSON ann+      , "contents"   .= contents+      ]++  nullary :: String -> a -> A.Value+  nullary tag ann =+    A.object+      [ "tag"        .= tag+      , "annotation" .= annToJSON ann+      ]++instance A.ToJSON WildcardData where+  toJSON = \case+    HoleWildcard name -> A.String name+    UnnamedWildcard -> A.Null+    IgnoredWildcard -> A.object [ "ignored" .= True ]++instance A.ToJSON a => A.ToJSON (Type a) where+  toJSON = typeToJSON A.toJSON++instance A.ToJSON a => A.ToJSON (Constraint a) where+  toJSON = constraintToJSON A.toJSON++instance A.ToJSON ConstraintData where+  toJSON = constraintDataToJSON++constraintDataFromJSON :: A.Value -> A.Parser ConstraintData+constraintDataFromJSON = A.withObject "PartialConstraintData" $ \o -> do+  (bs, trunc) <- o .: "contents"+  pure $ PartialConstraintData bs trunc++constraintFromJSON :: forall a. A.Parser a -> (A.Value -> A.Parser a) -> A.Value -> A.Parser (Constraint a)+constraintFromJSON defaultAnn annFromJSON = A.withObject "Constraint" $ \o -> do+  constraintAnn   <- (o .: "constraintAnn" >>= annFromJSON) <|> defaultAnn+  constraintClass <- o .: "constraintClass"+  constraintKindArgs <- o .:? "constraintKindArgs" .!= [] >>= traverse (typeFromJSON defaultAnn annFromJSON)+  constraintArgs  <- o .: "constraintArgs" >>= traverse (typeFromJSON defaultAnn annFromJSON)+  constraintData  <- o .: "constraintData" >>= traverse constraintDataFromJSON+  pure $ Constraint {..}++typeFromJSON :: forall a. A.Parser a -> (A.Value -> A.Parser a) -> A.Value -> A.Parser (Type a)+typeFromJSON defaultAnn annFromJSON = A.withObject "Type" $ \o -> do+  tag <- o .: "tag"+  a   <- (o .: "annotation" >>= annFromJSON) <|> defaultAnn+  let+    contents :: A.FromJSON b => A.Parser b+    contents = o .: "contents"+  case tag of+    "TUnknown" ->+      TUnknown a <$> contents+    "TypeVar" ->+      TypeVar a <$> contents+    "TypeLevelString" ->+      TypeLevelString a <$> contents+    "TypeLevelInt" ->+      TypeLevelInt a <$> contents+    "TypeWildcard" -> do+      b <- contents <|> pure UnnamedWildcard+      pure $ TypeWildcard a b+    "TypeConstructor" ->+      TypeConstructor a <$> contents+    "TypeOp" ->+      TypeOp a <$> contents+    "TypeApp" -> do+      (b, c) <- contents+      TypeApp a <$> go b <*> go c+    "KindApp" -> do+      (b, c) <- contents+      KindApp a <$> go b <*> go c+    "ForAll" -> do+      let+        withoutMbKind = do+          (b, c, d) <- contents+          ForAll a b Nothing <$> go c <*> pure d+        withMbKind = do+          (b, c, d, e) <- contents+          ForAll a b <$> (Just <$> go c) <*> go d <*> pure e+      withMbKind <|> withoutMbKind+    "ConstrainedType" -> do+      (b, c) <- contents+      ConstrainedType a <$> constraintFromJSON defaultAnn annFromJSON b <*> go c+    "Skolem" -> do+      (b, c, d, e) <- contents+      c' <- traverse go c+      pure $ Skolem a b c' d e+    "REmpty" ->+      pure $ REmpty a+    "RCons" -> do+      (b, c, d) <- contents+      RCons a b <$> go c <*> go d+    "KindedType" -> do+      (b, c) <- contents+      KindedType a <$> go b <*> go c+    "BinaryNoParensType" -> do+      (b, c, d) <- contents+      BinaryNoParensType a <$> go b <*> go c <*> go d+    "ParensInType" -> do+      b <- contents+      ParensInType a <$> go b+    -- Backwards compatability for kinds+    "KUnknown" ->+      TUnknown a <$> contents+    "Row" ->+      TypeApp a (TypeConstructor a C.Row) <$> (go =<< contents)+    "FunKind" -> do+      (b, c) <- contents+      TypeApp a . TypeApp a (TypeConstructor a C.Function) <$> go b <*> go c+    "NamedKind" ->+      TypeConstructor a <$> contents+    other ->+      fail $ "Unrecognised tag: " ++ other+  where+  go :: A.Value -> A.Parser (Type a)+  go = typeFromJSON defaultAnn annFromJSON++-- These overlapping instances exist to preserve compatibility for common+-- instances which have a sensible default for missing annotations.+instance {-# OVERLAPPING #-} A.FromJSON (Type SourceAnn) where+  parseJSON = typeFromJSON (pure NullSourceAnn) A.parseJSON++instance {-# OVERLAPPING #-} A.FromJSON (Type ()) where+  parseJSON = typeFromJSON (pure ()) A.parseJSON++instance {-# OVERLAPPING #-} A.FromJSON a => A.FromJSON (Type a) where+  parseJSON = typeFromJSON (fail "Invalid annotation") A.parseJSON++instance {-# OVERLAPPING #-} A.FromJSON (Constraint SourceAnn) where+  parseJSON = constraintFromJSON (pure NullSourceAnn) A.parseJSON++instance {-# OVERLAPPING #-} A.FromJSON (Constraint ()) where+  parseJSON = constraintFromJSON (pure ()) A.parseJSON++instance {-# OVERLAPPING #-} A.FromJSON a => A.FromJSON (Constraint a) where+  parseJSON = constraintFromJSON (fail "Invalid annotation") A.parseJSON++instance A.FromJSON ConstraintData where+  parseJSON = constraintDataFromJSON++instance A.FromJSON WildcardData where+  parseJSON = \case+    A.String name -> pure $ HoleWildcard name+    A.Object _ -> pure IgnoredWildcard+    A.Null -> pure UnnamedWildcard+    _ -> fail "Unrecognized WildcardData"++data RowListItem a = RowListItem+  { rowListAnn :: a+  , rowListLabel :: Label+  , rowListType :: Type a+  } deriving (Show, Generic, Functor, Foldable, Traversable)++srcRowListItem :: Label -> SourceType -> RowListItem SourceAnn+srcRowListItem = RowListItem NullSourceAnn++-- | Convert a row to a list of pairs of labels and types+rowToList :: Type a -> ([RowListItem a], Type a)+rowToList = go where+  go (RCons ann name ty row) =+    first (RowListItem ann name ty :) (rowToList row)+  go r = ([], r)++-- | Convert a row to a list of pairs of labels and types, sorted by the labels.+rowToSortedList :: Type a -> ([RowListItem a], Type a)+rowToSortedList = first (sortOn rowListLabel) . rowToList++-- | Convert a list of labels and types to a row+rowFromList :: ([RowListItem a], Type a) -> Type a+rowFromList (xs, r) = foldr (\(RowListItem ann name ty) -> RCons ann name ty) r xs++-- | Align two rows of types, splitting them into three parts:+--+-- * Those types which appear in both rows+-- * Those which appear only on the left+-- * Those which appear only on the right+--+-- Note: importantly, we preserve the order of the types with a given label.+alignRowsWith+  :: (Type a -> Type a -> r)+  -> Type a+  -> Type a+  -> ([r], (([RowListItem a], Type a), ([RowListItem a], Type a)))+alignRowsWith f ty1 ty2 = go s1 s2 where+  (s1, tail1) = rowToSortedList ty1+  (s2, tail2) = rowToSortedList ty2++  go [] r = ([], (([], tail1), (r, tail2)))+  go r [] = ([], ((r, tail1), ([], tail2)))+  go lhs@(RowListItem a1 l1 t1 : r1) rhs@(RowListItem a2 l2 t2 : r2)+    | l1 < l2 = (second . first . first) (RowListItem a1 l1 t1 :) (go r1 rhs)+    | l2 < l1 = (second . second . first) (RowListItem a2 l2 t2 :) (go lhs r2)+    | otherwise = first (f t1 t2 :) (go r1 r2)++-- | Check whether a type is a monotype+isMonoType :: Type a -> Bool+isMonoType ForAll{} = False+isMonoType (ParensInType _ t) = isMonoType t+isMonoType (KindedType _ t _) = isMonoType t+isMonoType _        = True++-- | Universally quantify a type+mkForAll :: [(a, (Text, Maybe (Type a)))] -> Type a -> Type a+mkForAll args ty = foldr (\(ann, (arg, mbK)) t -> ForAll ann arg mbK t Nothing) ty args++-- | Replace a type variable, taking into account variable shadowing+replaceTypeVars :: Text -> Type a -> Type a -> Type a+replaceTypeVars v r = replaceAllTypeVars [(v, r)]++-- | Replace named type variables with types+replaceAllTypeVars :: [(Text, Type a)] -> Type a -> Type a+replaceAllTypeVars = go [] where+  go :: [Text] -> [(Text, Type a)] -> Type a -> Type a+  go _  m (TypeVar ann v) = fromMaybe (TypeVar ann v) (v `lookup` m)+  go bs m (TypeApp ann t1 t2) = TypeApp ann (go bs m t1) (go bs m t2)+  go bs m (KindApp ann t1 t2) = KindApp ann (go bs m t1) (go bs m t2)+  go bs m (ForAll ann v mbK t sco)+    | v `elem` keys = go bs (filter ((/= v) . fst) m) $ ForAll ann v mbK' t sco+    | v `elem` usedVars =+      let v' = genName v (keys ++ bs ++ usedVars)+          t' = go bs [(v, TypeVar ann v')] t+      in ForAll ann v' mbK' (go (v' : bs) m t') sco+    | otherwise = ForAll ann v mbK' (go (v : bs) m t) sco+    where+      mbK' = go bs m <$> mbK+      keys = map fst m+      usedVars = concatMap (usedTypeVariables . snd) m+  go bs m (ConstrainedType ann c t) = ConstrainedType ann (mapConstraintArgsAll (map (go bs m)) c) (go bs m t)+  go bs m (RCons ann name' t r) = RCons ann name' (go bs m t) (go bs m r)+  go bs m (KindedType ann t k) = KindedType ann (go bs m t) (go bs m k)+  go bs m (BinaryNoParensType ann t1 t2 t3) = BinaryNoParensType ann (go bs m t1) (go bs m t2) (go bs m t3)+  go bs m (ParensInType ann t) = ParensInType ann (go bs m t)+  go _  _ ty = ty++  genName orig inUse = try' 0 where+    try' :: Integer -> Text+    try' n | (orig <> T.pack (show n)) `elem` inUse = try' (n + 1)+           | otherwise = orig <> T.pack (show n)++-- | Collect all type variables appearing in a type+usedTypeVariables :: Type a -> [Text]+usedTypeVariables = ordNub . everythingOnTypes (++) go where+  go (TypeVar _ v) = [v]+  go _ = []++-- | Collect all free type variables appearing in a type+freeTypeVariables :: Type a -> [Text]+freeTypeVariables = ordNub . fmap snd . sort . go 0 [] where+  -- Tracks kind levels so that variables appearing in kind annotations are listed first.+  go :: Int -> [Text] -> Type a -> [(Int, Text)]+  go lvl bound (TypeVar _ v) | v `notElem` bound = [(lvl, v)]+  go lvl bound (TypeApp _ t1 t2) = go lvl bound t1 ++ go lvl bound t2+  go lvl bound (KindApp _ t1 t2) = go lvl bound t1 ++ go (lvl - 1) bound t2+  go lvl bound (ForAll _ v mbK t _) = foldMap (go (lvl - 1) bound) mbK ++ go lvl (v : bound) t+  go lvl bound (ConstrainedType _ c t) = foldMap (go (lvl - 1) bound) (constraintKindArgs c) ++ foldMap (go lvl bound) (constraintArgs c) ++ go lvl bound t+  go lvl bound (RCons _ _ t r) = go lvl bound t ++ go lvl bound r+  go lvl bound (KindedType _ t k) = go lvl bound t ++ go (lvl - 1) bound k+  go lvl bound (BinaryNoParensType _ t1 t2 t3) = go lvl bound t1 ++ go lvl bound t2 ++ go lvl bound t3+  go lvl bound (ParensInType _ t) = go lvl bound t+  go _ _ _ = []++-- | Collect a complete set of kind-annotated quantifiers at the front of a type.+completeBinderList :: Type a -> Maybe ([(a, (Text, Type a))], Type a)+completeBinderList = go []+  where+  go acc = \case+    ForAll _ _ Nothing _ _ -> Nothing+    ForAll ann var (Just k) ty _ -> go ((ann, (var, k)) : acc) ty+    ty -> Just (reverse acc, ty)++-- | Universally quantify over all type variables appearing free in a type+quantify :: Type a -> Type a+quantify ty = foldr (\arg t -> ForAll (getAnnForType ty) arg Nothing t Nothing) ty $ freeTypeVariables ty++-- | Move all universal quantifiers to the front of a type+moveQuantifiersToFront :: Type a -> Type a+moveQuantifiersToFront = go [] [] where+  go qs cs (ForAll ann q mbK ty sco) = go ((ann, q, sco, mbK) : qs) cs ty+  go qs cs (ConstrainedType ann c ty) = go qs ((ann, c) : cs) ty+  go qs cs ty = foldl (\ty' (ann, q, sco, mbK) -> ForAll ann q mbK ty' sco) (foldl (\ty' (ann, c) -> ConstrainedType ann c ty') ty cs) qs++-- | Check if a type contains `forall`+containsForAll :: Type a -> Bool+containsForAll = everythingOnTypes (||) go where+  go :: Type a -> Bool+  go ForAll{} = True+  go _ = False++unknowns :: Type a -> IS.IntSet+unknowns = everythingOnTypes (<>) go where+  go :: Type a -> IS.IntSet+  go (TUnknown _ u) = IS.singleton u+  go _ = mempty++containsUnknowns :: Type a -> Bool+containsUnknowns = everythingOnTypes (||) go where+  go :: Type a -> Bool+  go TUnknown{} = True+  go _ = False++eraseKindApps :: Type a -> Type a+eraseKindApps = everywhereOnTypes $ \case+  KindApp _ ty _ -> ty+  ConstrainedType ann con ty ->+    ConstrainedType ann (con { constraintKindArgs = [] }) ty+  other -> other++eraseForAllKindAnnotations :: Type a -> Type a+eraseForAllKindAnnotations = removeAmbiguousVars . removeForAllKinds+  where+  removeForAllKinds = everywhereOnTypes $ \case+    ForAll ann arg _ ty sco ->+      ForAll ann arg Nothing ty sco+    other -> other++  removeAmbiguousVars = everywhereOnTypes $ \case+    fa@(ForAll _ arg _ ty _)+      | arg `elem` freeTypeVariables ty -> fa+      | otherwise -> ty+    other -> other++unapplyTypes :: Type a -> (Type a, [Type a], [Type a])+unapplyTypes = goTypes []+  where+  goTypes acc (TypeApp _ a b) = goTypes (b : acc) a+  goTypes acc a = let (ty, kinds) = goKinds [] a in (ty, kinds, acc)++  goKinds acc (KindApp _ a b) = goKinds (b : acc) a+  goKinds acc a = (a, acc)++unapplyConstraints :: Type a -> ([Constraint a], Type a)+unapplyConstraints = go []+  where+  go acc (ConstrainedType _ con ty) = go (con : acc) ty+  go acc ty = (reverse acc, ty)++-- | Construct the type of an instance declaration from its parts. Used in+-- error messages describing unnamed instances.+srcInstanceType+  :: SourceSpan+  -> [(Text, SourceType)]+  -> Qualified (ProperName 'ClassName)+  -> [SourceType]+  -> SourceType+srcInstanceType ss vars className tys+  = setAnnForType (ss, [])+  . flip (foldr $ \(tv, k) ty -> srcForAll tv (Just k) ty Nothing) vars+  . flip (foldl' srcTypeApp) tys+  $ srcTypeConstructor $ coerceProperName <$> className++everywhereOnTypes :: (Type a -> Type a) -> Type a -> Type a+everywhereOnTypes f = go where+  go (TypeApp ann t1 t2) = f (TypeApp ann (go t1) (go t2))+  go (KindApp ann t1 t2) = f (KindApp ann (go t1) (go t2))+  go (ForAll ann arg mbK ty sco) = f (ForAll ann arg (go <$> mbK) (go ty) sco)+  go (ConstrainedType ann c ty) = f (ConstrainedType ann (mapConstraintArgsAll (map go) c) (go ty))+  go (RCons ann name ty rest) = f (RCons ann name (go ty) (go rest))+  go (KindedType ann ty k) = f (KindedType ann (go ty) (go k))+  go (BinaryNoParensType ann t1 t2 t3) = f (BinaryNoParensType ann (go t1) (go t2) (go t3))+  go (ParensInType ann t) = f (ParensInType ann (go t))+  go other = f other++everywhereOnTypesM :: Monad m => (Type a -> m (Type a)) -> Type a -> m (Type a)+everywhereOnTypesM f = go where+  go (TypeApp ann t1 t2) = (TypeApp ann <$> go t1 <*> go t2) >>= f+  go (KindApp ann t1 t2) = (KindApp ann <$> go t1 <*> go t2) >>= f+  go (ForAll ann arg mbK ty sco) = (ForAll ann arg <$> traverse go mbK <*> go ty <*> pure sco) >>= f+  go (ConstrainedType ann c ty) = (ConstrainedType ann <$> overConstraintArgsAll (mapM go) c <*> go ty) >>= f+  go (RCons ann name ty rest) = (RCons ann name <$> go ty <*> go rest) >>= f+  go (KindedType ann ty k) = (KindedType ann <$> go ty <*> go k) >>= f+  go (BinaryNoParensType ann t1 t2 t3) = (BinaryNoParensType ann <$> go t1 <*> go t2 <*> go t3) >>= f+  go (ParensInType ann t) = (ParensInType ann <$> go t) >>= f+  go other = f other++everywhereOnTypesTopDownM :: Monad m => (Type a -> m (Type a)) -> Type a -> m (Type a)+everywhereOnTypesTopDownM f = go <=< f where+  go (TypeApp ann t1 t2) = TypeApp ann <$> (f t1 >>= go) <*> (f t2 >>= go)+  go (KindApp ann t1 t2) = KindApp ann <$> (f t1 >>= go) <*> (f t2 >>= go)+  go (ForAll ann arg mbK ty sco) = ForAll ann arg <$> traverse (f >=> go) mbK <*> (f ty >>= go) <*> pure sco+  go (ConstrainedType ann c ty) = ConstrainedType ann <$> overConstraintArgsAll (mapM (go <=< f)) c <*> (f ty >>= go)+  go (RCons ann name ty rest) = RCons ann name <$> (f ty >>= go) <*> (f rest >>= go)+  go (KindedType ann ty k) = KindedType ann <$> (f ty >>= go) <*> (f k >>= go)+  go (BinaryNoParensType ann t1 t2 t3) = BinaryNoParensType ann <$> (f t1 >>= go) <*> (f t2 >>= go) <*> (f t3 >>= go)+  go (ParensInType ann t) = ParensInType ann <$> (f t >>= go)+  go other = f other++everythingOnTypes :: (r -> r -> r) -> (Type a -> r) -> Type a -> r+everythingOnTypes (<+>) f = go where+  go t@(TypeApp _ t1 t2) = f t <+> go t1 <+> go t2+  go t@(KindApp _ t1 t2) = f t <+> go t1 <+> go t2+  go t@(ForAll _ _ (Just k) ty _) = f t <+> go k <+> go ty+  go t@(ForAll _ _ _ ty _) = f t <+> go ty+  go t@(ConstrainedType _ c ty) = foldl (<+>) (f t) (map go (constraintKindArgs c) ++ map go (constraintArgs c)) <+> go ty+  go t@(RCons _ _ ty rest) = f t <+> go ty <+> go rest+  go t@(KindedType _ ty k) = f t <+> go ty <+> go k+  go t@(BinaryNoParensType _ t1 t2 t3) = f t <+> go t1 <+> go t2 <+> go t3+  go t@(ParensInType _ t1) = f t <+> go t1+  go other = f other++everythingWithContextOnTypes :: s -> r -> (r -> r -> r) -> (s -> Type a -> (s, r)) -> Type a -> r+everythingWithContextOnTypes s0 r0 (<+>) f = go' s0 where+  go' s t = let (s', r) = f s t in r <+> go s' t+  go s (TypeApp _ t1 t2) = go' s t1 <+> go' s t2+  go s (KindApp _ t1 t2) = go' s t1 <+> go' s t2+  go s (ForAll _ _ (Just k) ty _) = go' s k <+> go' s ty+  go s (ForAll _ _ _ ty _) = go' s ty+  go s (ConstrainedType _ c ty) = foldl (<+>) r0 (map (go' s) (constraintKindArgs c) ++ map (go' s) (constraintArgs c)) <+> go' s ty+  go s (RCons _ _ ty rest) = go' s ty <+> go' s rest+  go s (KindedType _ ty k) = go' s ty <+> go' s k+  go s (BinaryNoParensType _ t1 t2 t3) = go' s t1 <+> go' s t2 <+> go' s t3+  go s (ParensInType _ t1) = go' s t1+  go _ _ = r0++annForType :: Lens' (Type a) a+annForType k (TUnknown a b) = (\z -> TUnknown z b) <$> k a+annForType k (TypeVar a b) = (\z -> TypeVar z b) <$> k a+annForType k (TypeLevelString a b) = (\z -> TypeLevelString z b) <$> k a+annForType k (TypeLevelInt a b) = (\z -> TypeLevelInt z b) <$> k a+annForType k (TypeWildcard a b) = (\z -> TypeWildcard z b) <$> k a+annForType k (TypeConstructor a b) = (\z -> TypeConstructor z b) <$> k a+annForType k (TypeOp a b) = (\z -> TypeOp z b) <$> k a+annForType k (TypeApp a b c) = (\z -> TypeApp z b c) <$> k a+annForType k (KindApp a b c) = (\z -> KindApp z b c) <$> k a+annForType k (ForAll a b c d e) = (\z -> ForAll z b c d e) <$> k a+annForType k (ConstrainedType a b c) = (\z -> ConstrainedType z b c) <$> k a+annForType k (Skolem a b c d e) = (\z -> Skolem z b c d e) <$> k a+annForType k (REmpty a) = REmpty <$> k a+annForType k (RCons a b c d) = (\z -> RCons z b c d) <$> k a+annForType k (KindedType a b c) = (\z -> KindedType z b c) <$> k a+annForType k (BinaryNoParensType a b c d) = (\z -> BinaryNoParensType z b c d) <$> k a+annForType k (ParensInType a b) = (\z -> ParensInType z b) <$> k a++getAnnForType :: Type a -> a+getAnnForType = (^. annForType)++setAnnForType :: a -> Type a -> Type a+setAnnForType = set annForType++instance Eq (Type a) where+  (==) = eqType++instance Ord (Type a) where+  compare = compareType++eqType :: Type a -> Type b -> Bool+eqType (TUnknown _ a) (TUnknown _ a') = a == a'+eqType (TypeVar _ a) (TypeVar _ a') = a == a'+eqType (TypeLevelString _ a) (TypeLevelString _ a') = a == a'+eqType (TypeLevelInt _ a) (TypeLevelInt _ a') = a == a'+eqType (TypeWildcard _ a) (TypeWildcard _ a') = a == a'+eqType (TypeConstructor _ a) (TypeConstructor _ a') = a == a'+eqType (TypeOp _ a) (TypeOp _ a') = a == a'+eqType (TypeApp _ a b) (TypeApp _ a' b') = eqType a a' && eqType b b'+eqType (KindApp _ a b) (KindApp _ a' b') = eqType a a' && eqType b b'+eqType (ForAll _ a b c d) (ForAll _ a' b' c' d') = a == a' && eqMaybeType b b' && eqType c c' && d == d'+eqType (ConstrainedType _ a b) (ConstrainedType _ a' b') = eqConstraint a a' && eqType b b'+eqType (Skolem _ a b c d) (Skolem _ a' b' c' d') = a == a' && eqMaybeType b b' && c == c' && d == d'+eqType (REmpty _) (REmpty _) = True+eqType (RCons _ a b c) (RCons _ a' b' c') = a == a' && eqType b b' && eqType c c'+eqType (KindedType _ a b) (KindedType _ a' b') = eqType a a' && eqType b b'+eqType (BinaryNoParensType _ a b c) (BinaryNoParensType _ a' b' c') = eqType a a' && eqType b b' && eqType c c'+eqType (ParensInType _ a) (ParensInType _ a') = eqType a a'+eqType _ _ = False++eqMaybeType :: Maybe (Type a) -> Maybe (Type b) -> Bool+eqMaybeType (Just a) (Just b) = eqType a b+eqMaybeType Nothing Nothing = True+eqMaybeType _ _ = False++compareType :: Type a -> Type b -> Ordering+compareType (TUnknown _ a) (TUnknown _ a') = compare a a'+compareType (TypeVar _ a) (TypeVar _ a') = compare a a'+compareType (TypeLevelString _ a) (TypeLevelString _ a') = compare a a'+compareType (TypeLevelInt _ a) (TypeLevelInt _ a') = compare a a'+compareType (TypeWildcard _ a) (TypeWildcard _ a') = compare a a'+compareType (TypeConstructor _ a) (TypeConstructor _ a') = compare a a'+compareType (TypeOp _ a) (TypeOp _ a') = compare a a'+compareType (TypeApp _ a b) (TypeApp _ a' b') = compareType a a' <> compareType b b'+compareType (KindApp _ a b) (KindApp _ a' b') = compareType a a' <> compareType b b'+compareType (ForAll _ a b c d) (ForAll _ a' b' c' d') = compare a a' <> compareMaybeType b b' <> compareType c c' <> compare d d'+compareType (ConstrainedType _ a b) (ConstrainedType _ a' b') = compareConstraint a a' <> compareType b b'+compareType (Skolem _ a b c d) (Skolem _ a' b' c' d') = compare a a' <> compareMaybeType b b' <> compare c c' <> compare d d'+compareType (REmpty _) (REmpty _) = EQ+compareType (RCons _ a b c) (RCons _ a' b' c') = compare a a' <> compareType b b' <> compareType c c'+compareType (KindedType _ a b) (KindedType _ a' b') = compareType a a' <> compareType b b'+compareType (BinaryNoParensType _ a b c) (BinaryNoParensType _ a' b' c') = compareType a a' <> compareType b b' <> compareType c c'+compareType (ParensInType _ a) (ParensInType _ a') = compareType a a'+compareType typ typ' =+  compare (orderOf typ) (orderOf typ')+    where+      orderOf :: Type a -> Int+      orderOf TUnknown{} = 0+      orderOf TypeVar{} = 1+      orderOf TypeLevelString{} = 2+      orderOf TypeLevelInt{} = 3+      orderOf TypeWildcard{} = 4+      orderOf TypeConstructor{} = 5+      orderOf TypeOp{} = 6+      orderOf TypeApp{} = 7+      orderOf KindApp{} = 8+      orderOf ForAll{} = 9+      orderOf ConstrainedType{} = 10+      orderOf Skolem{} = 11+      orderOf REmpty{} = 12+      orderOf RCons{} = 13+      orderOf KindedType{} = 14+      orderOf BinaryNoParensType{} = 15+      orderOf ParensInType{} = 16++compareMaybeType :: Maybe (Type a) -> Maybe (Type b) -> Ordering+compareMaybeType (Just a) (Just b) = compareType a b+compareMaybeType Nothing Nothing = EQ+compareMaybeType Nothing _ = LT+compareMaybeType _ _ = GT++instance Eq (Constraint a) where+  (==) = eqConstraint++instance Ord (Constraint a) where+  compare = compareConstraint++eqConstraint :: Constraint a -> Constraint b -> Bool+eqConstraint (Constraint _ a b c d) (Constraint _ a' b' c' d') = a == a' && and (zipWith eqType b b') && and (zipWith eqType c c') && d == d'++compareConstraint :: Constraint a -> Constraint b -> Ordering+compareConstraint (Constraint _ a b c d) (Constraint _ a' b' c' d') = compare a a' <> fold (zipWith compareType b b') <> fold (zipWith compareType c c') <> compare d d'
src/System/IO/UTF8.hs view
@@ -30,7 +30,3 @@ readUTF8File :: FilePath -> IO String readUTF8File inFile =   fmap (UTF8.toString . fixCRLF) (BS.readFile inFile)--writeUTF8File :: FilePath -> String -> IO ()-writeUTF8File inFile text =-  BS.writeFile inFile (UTF8.fromString text)
stack.yaml view
@@ -1,8 +1,9 @@+# Please update Haskell image versions under .github/workflows/ci.yml together to use the same GHC version+# (or the CI build will fail) resolver: lts-18.15 pvp-bounds: both packages: - '.'-- lib/purescript-cst ghc-options:   # Build with advanced optimizations enabled by default   "$locals": -O2 -Werror@@ -21,6 +22,8 @@ # See https://github.com/purescript/purescript/issues/4253 - process-1.6.13.1 - Cabal-3.2.1.0+# Not included in Stackage until the lts-19 series+- monoidal-containers-0.6.2.0 nix:   packages:   - zlib
tests/Main.hs view
@@ -16,7 +16,7 @@ import qualified TestPsci import qualified TestIde import qualified TestPscPublish-import qualified TestBundle+-- import qualified TestBundle import qualified TestMake import qualified TestUtils import qualified TestGraph@@ -35,7 +35,6 @@     describe "ide" TestIde.spec     beforeAll TestUtils.setupSupportModules $ do       describe "compiler" TestCompiler.spec-      describe "bundle" TestBundle.spec     describe "make" TestMake.spec     describe "psci" TestPsci.spec     describe "corefn" TestCoreFn.spec
− tests/TestBundle.hs
@@ -1,79 +0,0 @@-{-# LANGUAGE DoAndIfThenElse #-}--module TestBundle where--import Prelude ()-import Prelude.Compat--import qualified Language.PureScript as P-import Language.PureScript.Bundle--import Data.Function (on)-import Data.List (minimumBy)--import Control.Monad-import Control.Monad.IO.Class (liftIO)-import Control.Monad.Trans.Except--import System.Exit-import System.Process-import System.FilePath-import System.IO-import System.IO.UTF8-import qualified System.FilePath.Glob as Glob--import TestUtils-import Test.Hspec--spec :: SpecWith SupportModules-spec =-  context "Bundle examples" $-    beforeAllWith ((<$> createOutputFile logfile) . (,)) $ do-      bundleTestCases <- runIO $ getTestFiles "bundle"-      forM_ bundleTestCases $ \testPurs -> do-        it ("'" <> takeFileName (getTestMain testPurs) <> "' should compile, bundle and run without error") $ \(support, outputFile) ->-          assertBundles support testPurs outputFile-  where--  -- Takes the test entry point from a group of purs files - this is determined-  -- by the file with the shortest path name, as everything but the main file-  -- will be under a subdirectory.-  getTestMain :: [FilePath] -> FilePath-  getTestMain = minimumBy (compare `on` length)--assertBundles-  :: SupportModules-  -> [FilePath]-  -> Handle-  -> Expectation-assertBundles support inputFiles outputFile = do-  (result, _) <- compile support inputFiles-  case result of-    Left errs -> expectationFailure . P.prettyPrintMultipleErrors P.defaultPPEOptions $ errs-    Right _ -> do-      process <- findNodeProcess-      jsFiles <- Glob.globDir1 (Glob.compile "**/*.js") modulesDir-      let entryPoint = modulesDir </> "index.js"-      let entryModule = map (`ModuleIdentifier` Regular) ["Main"]-      bundled <- runExceptT $ do-        input <- forM jsFiles $ \filename -> do-          js <- liftIO $ readUTF8File filename-          mid <- guessModuleIdentifier filename-          length js `seq` return (mid, Just filename, js)-        bundleSM input entryModule (Just "Main") "PS" (Just entryPoint) Nothing-      case bundled of-          Right (_, js) -> do-            writeUTF8File entryPoint js-            nodeResult <- traverse (\node -> readProcessWithExitCode node [entryPoint] "") process-            hPutStrLn outputFile $ "\n" <> takeFileName (last inputFiles) <> ":"-            case nodeResult of-              Just (ExitSuccess, out, err)-               | not (null err) -> expectationFailure $ "Test wrote to stderr:\n\n" <> err-               | not (null out) && trim (last (lines out)) == "Done" -> hPutStr outputFile out-               | otherwise -> expectationFailure $ "Test did not finish with 'Done':\n\n" <> out-              Just (ExitFailure _, _, err) -> expectationFailure err-              Nothing -> expectationFailure "Couldn't find node.js executable"-          Left err -> expectationFailure $ "Could not bundle: " ++ show err--logfile :: FilePath-logfile = "bundle-tests.out"
tests/TestCompiler.hs view
@@ -26,6 +26,7 @@ import Prelude.Compat  import qualified Language.PureScript as P+import Language.PureScript.Interactive.IO (readNodeProcessWithExitCode)  import Control.Arrow ((>>>)) import qualified Data.ByteString as BS@@ -39,7 +40,6 @@ import Control.Monad  import System.Exit-import System.Process import System.FilePath import System.IO import System.IO.UTF8 (readUTF8File)@@ -135,22 +135,21 @@   -> Handle   -> Expectation assertCompiles support inputFiles outputFile = do-  (result, _) <- compile support inputFiles+  (result, _) <- compile True support inputFiles   case result of     Left errs -> expectationFailure . P.prettyPrintMultipleErrors P.defaultPPEOptions $ errs     Right _ -> do-      process <- findNodeProcess       let entryPoint = modulesDir </> "index.js"-      writeFile entryPoint "require('Main').main()"-      nodeResult <- traverse (\node -> readProcessWithExitCode node [entryPoint] "") process+      writeFile entryPoint "import('./Main/index.js').then(({ main }) => main());"+      nodeResult <- readNodeProcessWithExitCode Nothing [entryPoint] ""       hPutStrLn outputFile $ "\n" <> takeFileName (last inputFiles) <> ":"       case nodeResult of-        Just (ExitSuccess, out, err)+        Right (ExitSuccess, out, err)           | not (null err) -> expectationFailure $ "Test wrote to stderr:\n\n" <> err           | not (null out) && trim (last (lines out)) == "Done" -> hPutStr outputFile out           | otherwise -> expectationFailure $ "Test did not finish with 'Done':\n\n" <> out-        Just (ExitFailure _, _, err) -> expectationFailure err-        Nothing -> expectationFailure "Couldn't find node.js executable"+        Right (ExitFailure _, _, err) -> expectationFailure err+        Left err -> expectationFailure err  assertCompilesWithWarnings   :: SupportModules@@ -158,7 +157,7 @@   -> [String]   -> Expectation assertCompilesWithWarnings support inputFiles shouldWarnWith = do-  result'@(result, warnings) <- compile support inputFiles+  result'@(result, warnings) <- compile False support inputFiles   case result of     Left errs ->       expectationFailure . P.prettyPrintMultipleErrors P.defaultPPEOptions $ errs@@ -174,7 +173,7 @@   -> [String]   -> Expectation assertDoesNotCompile support inputFiles shouldFailWith = do-  result <- compile support inputFiles+  result <- compile False support inputFiles   case fst result of     Left errs -> do       when (null shouldFailWith)@@ -194,7 +193,7 @@   -> [FilePath]   -> Expectation assertCompilesToExpectedOutput support inputFiles = do-  (result, _) <- compile support inputFiles+  (result, _) <- compile False support inputFiles   case result of     Left errs -> expectationFailure . P.prettyPrintMultipleErrors P.defaultPPEOptions $ errs     Right _ ->
tests/TestMake.hs view
@@ -86,7 +86,7 @@       writeFileWithTimestamp modulePath timestampA moduleContent       compile [modulePath] `shouldReturn` moduleNames ["Module"] -      writeFileWithTimestamp moduleFFIPath timestampB "exports.bar = 1;\n"+      writeFileWithTimestamp moduleFFIPath timestampB "export var bar = 1;\n"       compile [modulePath] `shouldReturn` moduleNames ["Module"]      it "recompiles if an FFI file was removed" $ do@@ -96,7 +96,7 @@           moduleContent = "module Module where\nfoo = 0\n"        writeFileWithTimestamp modulePath timestampA moduleContent-      writeFileWithTimestamp moduleFFIPath timestampB "exports.bar = 1;\n"+      writeFileWithTimestamp moduleFFIPath timestampB "export var bar = 1;\n"       compile [modulePath] `shouldReturn` moduleNames ["Module"]        removeFile moduleFFIPath@@ -233,7 +233,7 @@     foreigns <- P.inferForeignModules filePathMap     let makeActions =           (P.buildMakeActions modulesDir filePathMap foreigns True)-            { P.progress = \(P.CompilingModule mn) ->+            { P.progress = \(P.CompilingModule mn _) ->                 liftIO $ modifyMVar_ recompiled (return . Set.insert mn)             }     P.make makeActions (map snd ms)
tests/TestPrimDocs.hs view
@@ -29,7 +29,8 @@               P.primRowTypes <>               P.primRowListTypes <>               P.primTypeErrorTypes <>-              P.primSymbolTypes )+              P.primSymbolTypes <>+              P.primIntTypes )     let documentedPrimNames =           map D.declTitle (concatMap D.modDeclarations D.primModules) 
tests/TestPsci/TestEnv.hs view
@@ -17,7 +17,6 @@ import           System.Exit import           System.FilePath ((</>), pathSeparator) import qualified System.FilePath.Glob as Glob-import           System.Process (readProcessWithExitCode) import           Test.Hspec (shouldBe, Expectation)  -- | A monad transformer for handle PSCi actions in tests@@ -55,13 +54,12 @@ -- command evaluation. jsEval :: TestPSCi String jsEval = liftIO $ do-  writeFile indexFile "require('$PSCI')['$main']();"-  process <- findNodeProcess-  result <- traverse (\node -> readProcessWithExitCode node [indexFile] "") process+  writeFile indexFile "import('./$PSCI/index.js').then(({ $main }) => $main());"+  result <- readNodeProcessWithExitCode Nothing [indexFile] ""   case result of-    Just (ExitSuccess, out, _)   -> return out-    Just (ExitFailure _, _, err) -> putStrLn err >> exitFailure-    Nothing                      -> putStrLn "Couldn't find node.js" >> exitFailure+    Right (ExitSuccess, out, _)   -> return out+    Right (ExitFailure _, _, err) -> putStrLn err >> exitFailure+    Left err                      -> putStrLn err >> exitFailure  -- | Run a PSCi command and evaluate its outputs: -- * jsOutputEval is used to evaluate compiled JS output by PSCi
tests/TestUtils.hs view
@@ -5,6 +5,9 @@  import qualified Language.PureScript as P import qualified Language.PureScript.CST as CST+import qualified Language.PureScript.AST as AST+import qualified Language.PureScript.Names as N+import Language.PureScript.Interactive.IO (findNodeProcess)  import Control.Arrow ((***), (>>>)) import Control.Monad@@ -35,11 +38,6 @@ import System.IO import Test.Hspec -findNodeProcess :: IO (Maybe String)-findNodeProcess = runMaybeT . msum $ map (MaybeT . findExecutable) names-  where-  names = ["nodejs", "node"]- -- | -- Fetches code necessary to run the tests with. The resulting support code -- should then be checked in, so that npm/bower etc is not required to run the@@ -75,15 +73,15 @@     heading "Updating support code"     callCommand "npm install"     -- bower uses shebang "/usr/bin/env node", but we might have nodejs-    node <- maybe cannotFindNode pure =<< findNodeProcess+    node <- either cannotFindNode pure =<< findNodeProcess     -- Sometimes we run as a root (e.g. in simple docker containers)     -- And we are non-interactive: https://github.com/bower/bower/issues/1162     callProcess node ["node_modules/bower/bin/bower", "--allow-root", "install", "--config.interactive=false"]     writeFile lastUpdatedFile ""   where-  cannotFindNode :: IO a-  cannotFindNode = do-    hPutStrLn stderr "Cannot find node (or nodejs) executable"+  cannotFindNode :: String -> IO a+  cannotFindNode message = do+    hPutStrLn stderr message     exitFailure    getModificationTimeMaybe :: FilePath -> IO (Maybe UTCTime)@@ -158,23 +156,8 @@  getTestFiles :: FilePath -> IO [[FilePath]] getTestFiles testDir = do-  cwd <- getCurrentDirectory   let dir = "tests" </> "purs" </> testDir-  testsInPath <- getFiles dir <$> testGlob dir-  let rerunPath = dir </> "RerunCompilerTests.txt"-  hasRerunFile <- doesFileExist rerunPath-  rerunTests <--    if hasRerunFile-    then let compilerTestDir = cwd </> "tests" </> "purs" </> "passing"-             textToTestFiles-               = mapM (\path -> ((path ++ ".purs") :) <$> testGlob path)-               . map ((compilerTestDir </>) . T.unpack)-               . filter (not . T.null)-               . map (T.strip . fst . T.breakOn "--")-               . T.lines-         in readUTF8FileT rerunPath >>= textToTestFiles-    else return []-  return $ testsInPath ++ rerunTests+  getFiles dir <$> testGlob dir   where   -- A glob for all purs and js files within a test directory   testGlob :: FilePath -> IO [FilePath]@@ -199,21 +182,35 @@        else dir  compile-  :: SupportModules+  :: Bool+  -> SupportModules   -> [FilePath]   -> IO (Either P.MultipleErrors [P.ExternsFile], P.MultipleErrors)-compile SupportModules{..} inputFiles = runTest $ do+compile checkForMainModule SupportModules{..} inputFiles = runTest $ do   -- Sorting the input files makes some messages (e.g., duplicate module) deterministic   fs <- liftIO $ readInput (sort inputFiles)   msWithWarnings <- CST.parseFromFiles id fs   tell $ foldMap (\(fp, (ws, _)) -> CST.toMultipleWarnings fp ws) msWithWarnings   let ms = fmap snd <$> msWithWarnings   foreigns <- inferForeignModules ms-  let actions = makeActions supportModules (foreigns `M.union` supportForeigns)+  let+    actions = makeActions supportModules (foreigns `M.union` supportForeigns)+    hasMainModule = (==) 1 $ length $ filter (== "Main") $ fmap getPsModuleName ms   case ms of-    [singleModule] -> pure <$> P.rebuildModule actions supportExterns (snd singleModule)-    _ -> P.make actions (CST.pureResult <$> supportModules ++ map snd ms)+    [singleModule] -> do+      when (checkForMainModule && not hasMainModule) $ do+        error $ "When testing a single PureScript file, the file's module's name must be 'Main' but got '"+          <> T.unpack (getPsModuleName singleModule) <> "'."+      pure <$> P.rebuildModule actions supportExterns (snd singleModule)+    _ -> do+      when (checkForMainModule && not hasMainModule) $ do+        error "When testing multiple PureScript files, the main file's module's name must be 'Main'."+      P.make actions (CST.pureResult <$> supportModules ++ map snd ms) +getPsModuleName :: (a, AST.Module) -> T.Text+getPsModuleName psModule = case snd psModule of+  AST.Module _ _ (N.ModuleName t) _ _ -> t+ makeActions :: [P.Module] -> M.Map P.ModuleName FilePath -> P.MakeActions P.Make makeActions modules foreigns = (P.buildMakeActions modulesDir (P.internalError "makeActions: input file map was read.") foreigns False)                                { P.getInputTimestampsAndHashes = getInputTimestampsAndHashes@@ -251,7 +248,7 @@ trim = dropWhile isSpace >>> reverse >>> dropWhile isSpace >>> reverse  modulesDir :: FilePath-modulesDir = ".test_modules" </> "node_modules"+modulesDir = ".test_modules"  logpath :: FilePath logpath = "purescript-output"
− tests/purs/bundle/3551.purs
@@ -1,21 +0,0 @@-module Main where--import Prelude-import Effect (Effect)-import Effect.Console (error, log)--import ModuleWithDeadCode (class FooBar, exportThatUsesBar, results)--main :: Effect Unit-main = do-  when results.barIsExported $ error "bar is exported"-  when results.fooIsNotEliminated $ error "foo is not eliminated"--  -- These are brittleness canaries; if they fail, then the compiler output has-  -- probably changed such that the above checks are not doing their job.-  unless results.exportThatUsesBarIsExported $-    error "likely test error: check that barIsExported is working"-  unless results.barIsNotEliminated $-    error "likely test error: check that fooIsNotEliminated is working"--  when (exportThatUsesBar 0) $ log "Done"
− tests/purs/bundle/3551/ModuleWithDeadCode.js
@@ -1,12 +0,0 @@-"use strict";--var fs = require('fs');--var source = fs.readFileSync(__filename, 'utf-8');--exports.results = {-    fooIsNotEliminated: /^ *var foo =/m.test(source),-    barIsExported: /^ *exports\["bar"\] =/m.test(source),-    barIsNotEliminated: /^ *var bar =/m.test(source),-    exportThatUsesBarIsExported: /^ *exports\["exportThatUsesBar"\] =/m.test(source),-};
− tests/purs/bundle/3551/ModuleWithDeadCode.purs
@@ -1,16 +0,0 @@-module ModuleWithDeadCode (class FooBar, bar, exportThatUsesBar, foo, results) where--import Prelude--class FooBar a where-  foo :: a-  bar :: a -> Boolean--instance intFooBar :: FooBar Int where-  foo = 0-  bar _ = true--exportThatUsesBar :: forall a. (FooBar a) => a -> Boolean-exportThatUsesBar = bar--foreign import results :: { fooIsNotEliminated :: Boolean, barIsExported :: Boolean, barIsNotEliminated :: Boolean, exportThatUsesBarIsExported :: Boolean }
− tests/purs/bundle/3727.js
@@ -1,4 +0,0 @@-'use strict';--exports.foo = 1;-exports.bar = exports.foo;
− tests/purs/bundle/3727.purs
@@ -1,13 +0,0 @@-module Main (main) where--import Prelude-import Effect (Effect)-import Effect.Console (log)-import Test.Assert (assert)--main :: Effect Unit-main = do-  assert (bar == 1)-  log "Done"--foreign import bar :: Int
− tests/purs/bundle/FunctionDeclaration.js
@@ -1,19 +0,0 @@-"use strict";--var foo = 0;--function bar(foo) {-  return foo;-}--var baz = "Done";--function qux() {-  return bar(baz);-}--exports.qux = qux;--var fs = require('fs');-var source = fs.readFileSync(__filename, 'utf-8');-exports.fooIsEliminated = !/^ *var foo/m.test(source);
− tests/purs/bundle/FunctionDeclaration.purs
@@ -1,14 +0,0 @@-module Main (main) where--import Prelude-import Effect (Effect)-import Effect.Console (log)-import Test.Assert (assert')--main :: Effect Unit-main = do-  assert' "foo" fooIsEliminated-  qux >>= log--foreign import qux :: Effect String-foreign import fooIsEliminated :: Boolean
− tests/purs/bundle/ObjectShorthand.js
@@ -1,15 +0,0 @@-"use strict";--var foo = 1;--exports.bar = { foo };--var baz = 2;--exports.quux = function(baz) {-  return { baz };-};--var fs = require('fs');-var source = fs.readFileSync(__filename, 'utf-8');-exports.bazIsEliminated = !/^ *var baz =/m.test(source);
− tests/purs/bundle/ObjectShorthand.purs
@@ -1,18 +0,0 @@--- See issue #3741-module Main (main) where--import Prelude-import Effect (Effect)-import Effect.Console (log)-import Test.Assert (assert')--main :: Effect Unit-main = do-  assert' "bar" (bar.foo == 1)-  assert' "quux" (quux 3 == { baz: 3 })-  assert' "baz" bazIsEliminated-  log "Done"--foreign import bar :: { foo :: Int }-foreign import quux :: forall a. a -> { baz :: a }-foreign import bazIsEliminated :: Boolean
− tests/purs/bundle/PSasConstructor.purs
@@ -1,11 +0,0 @@-module Main where--import Prelude-import Effect (Effect)-import Effect.Console (log)--data P = PS --main :: Effect Unit-main = do-  log "Done"
+ tests/purs/docs/output/OperatorSection/docs.json view
@@ -0,0 +1,1 @@+{"reExports":[],"name":"OperatorSection","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"Nil","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[3,13],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[3,18]}},{"comments":null,"title":"Cons","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["OperatorSection"],"List"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"declType":"dataConstructor"},"sourceSpan":{"start":[3,19],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[3,25]}},{"comments":null,"title":"<anonymous>","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["OperatorSection"],"Foldable"]},{"annotation":[],"tag":"TypeConstructor","contents":[["OperatorSection"],"List"]}]}},"sourceSpan":{"start":[10,1],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[16,21]}}],"comments":null,"title":"List","info":{"roles":["Representational"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null]]},"sourceSpan":{"start":[3,1],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[3,36]}},{"kind":null,"children":[],"comments":null,"title":"(:)","info":{"declType":"alias","alias":[["OperatorSection"],{"Right":{"Right":"Cons"}}],"fixity":{"associativity":"infixr","precedence":6}},"sourceSpan":{"start":[5,1],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[5,19]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"foldl","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[8,3],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[8,54]}},{"comments":null,"title":"<anonymous>","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["OperatorSection"],"Foldable"]},{"annotation":[],"tag":"TypeConstructor","contents":[["OperatorSection"],"List"]}]}},"sourceSpan":{"start":[10,1],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[16,21]}}],"comments":null,"title":"Foldable","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[7,1],"name":"/home/jordan/Programming/Projects/purescript/tests/purs/docs/src/OperatorSection.purs","end":[8,54]}}]}
tests/purs/docs/output/Prim.Int/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Prim.Int","comments":"The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers.","declarations":[{"kind":null,"children":[],"comments":"Compiler solved type class for adding type-level `Int`s.\n","title":"Add","info":{"fundeps":[[["left","right"],["sum"]],[["left","sum"],["right"]],[["right","sum"],["left"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["sum",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for comparing two type-level `Int`s.\nProduces an `Ordering`.\n","title":"Compare","info":{"fundeps":[[["left","right"],["ordering"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}],["ordering",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for multiplying type-level `Int`s.\n","title":"Mul","info":{"fundeps":[[["left","right"],["product"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["product",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null}]}+{"reExports":[],"name":"Prim.Int","comments":"The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers.","declarations":[{"kind":null,"children":[],"comments":"Compiler solved type class for adding type-level `Int`s.\n","title":"Add","info":{"fundeps":[[["left","right"],["sum"]],[["left","sum"],["right"]],[["right","sum"],["left"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["sum",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for comparing two type-level `Int`s.\nProduces an `Ordering`.\n","title":"Compare","info":{"fundeps":[[["left","right"],["ordering"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}],["ordering",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for multiplying type-level `Int`s.\n","title":"Mul","info":{"fundeps":[[["left","right"],["product"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["product",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for converting a type-level `Int` into a type-level `String` (i.e. `Symbol`).\n","title":"ToString","info":{"fundeps":[[["int"],["string"]]],"arguments":[["int",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["string",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null}]}
tests/purs/docs/output/cache-db.json view
@@ -1,1 +1,1 @@-{"Ado":{"src/Ado.purs":["2021-10-25T20:49:21.236373121Z","bd980ae20d61e0e34d23507b1d25598f27407a78cf70084327506f21cc02d85df1bd1b6937459665a8dd9df5bb43ec5947b6e94c16c852aba233747e05a9d58f"]},"ChildDeclOrder":{"src/ChildDeclOrder.purs":["2021-10-25T20:49:21.236373121Z","41a7be97fffe1bbbf925ccb56b68246abb8684b23529fc25e07827b57b32b60ccd82d5c9a2279dc23be1f8803cff8267fa296509b873ec337ffa15ee0e32e2c9"]},"Clash":{"src/Clash.purs":["2021-10-25T20:49:21.236373121Z","7b70d019ea46b72149e185d82bc1345113e8a3977a886aa31ac8a268c6c63c7b93553e1586c45e023e49e485d3f6523a4a11efc8dc70dd8bac5d8b9cac4e4c2d"]},"Clash1":{"src/Clash1.purs":["2021-10-25T20:49:21.236373121Z","bd09c1fd0308ce61d83bef03d3b2366601df559ef8cc9c09f17d963a1bfb2b2e373dcbf5729a3e465c635fbf0035ae09ea3ba58b7844b56586dc3baf9d857bb5"]},"Clash1a":{"src/Clash1a.purs":["2021-10-25T20:49:21.236373121Z","b5c374c74a46d3f633c948de256e299dc2713857ce09441b5ae2f03afdd0468610088f39854f69848c1c9aecf3441b1b39e0919e499280a19d69b83de07d5d0b"]},"Clash2":{"src/Clash2.purs":["2021-10-25T20:49:21.240373279Z","10c61c6600084fdcc0ee93608a354fd7efa7edab67ac8cce131e522b597080b2927dc7bb1a6c98765dfc9a30583dc5bea2514d2932554ab1657c664a81a0a81b"]},"Clash2a":{"src/Clash2a.purs":["2021-10-25T20:49:21.240373279Z","b002aac5be65ac1cb55d10518840293780ea6d4a42b045172544ab3478ea83252f0672f0e1d4ad1599db3955f55202738ba1ee254b8ad94e914fc43fc1f6750f"]},"ConstrainedArgument":{"src/ConstrainedArgument.purs":["2021-10-25T20:49:21.240373279Z","6caa6cc505c6574957afe8e703f6e9869211e9c0a0676ba36a79d2a8b7e3c2c1570aae714cd6acc37e5b206745941460c1cf370a3bbd783c79b89351681ec890"]},"Data.Newtype":{"bower_components/purescript-newtype/src/Data/Newtype.purs":["2021-11-04T16:46:24.652281269Z","408eb6f95efb52faff05d73c757d21cebdd3b58dce3f5b8cfb5f0772224ca7e6ff9b5df0ab9ea40ce0f8448664fe56028af844b2c5dc32e5712b7d9d1541f2b7"]},"DeclOrder":{"src/DeclOrder.purs":["2021-10-25T20:49:21.240373279Z","a8c6ab9c335037c255ae6e0124a107f2e2462c2eebc2ff3637273ba436f2f3589ae203919ff5c8c61106b0542114ba3eba66426d8b5e316089bc1f4efb72643a"]},"DeclOrderNoExportList":{"src/DeclOrderNoExportList.purs":["2021-10-25T20:49:21.240373279Z","379def50dfd7a01dd2b057c707ea8ee53147d41c7dc28083c3827ccc213816840fd26d784a78bd1eabd105231e5479c7bfeebfcb03d1e2f3e8174ab173d740c4"]},"Desugar":{"src/Desugar.purs":["2021-10-25T20:49:21.240373279Z","50ceefe5cbac286908cc7070f4e94f57c62b5c91245d5a8c66d7f4565e3d037e4cf11524c4c790664588a0a5c4216390b5138be9ec93e14d0f82a2c59c8f561a"]},"DocComments":{"src/DocComments.purs":["2021-10-25T20:49:21.240373279Z","220498626601722feb58dd23dd80ac970f6ba7df8e8c2ad604ed833933f6b36219fb5f1d0b9963ffc7e9314043760055ab547fac5784a28416a4851f257a635b"]},"DocCommentsClassMethod":{"src/DocCommentsClassMethod.purs":["2021-10-25T20:49:21.240373279Z","f55a03f2b2624a9ca01adc8372bad4b7e46e8ef1a52ec41c5992767146c9a2354320a3a38587cbf2e78fec118430f193fdcb1cdd9600cd9f755dbbc2e36e46b7"]},"DocCommentsDataConstructor":{"src/DocCommentsDataConstructor.purs":["2021-10-25T20:49:21.240373279Z","68d644ce63642bd55d8338e78e0070c409d3c970a2967338cf612d7a3217813fd98a08e1905776572819cadbc08cdd4bec4a7c1473974a9f3f5d5b1149d33257"]},"DocCommentsMerge":{"src/DocCommentsMerge.purs":["2022-03-08T13:54:53.122805587Z","08e74333f59b1991e5c044debca1b8d2be7193898cc501c6c422b2f3e4c6e6aba8562cfa7b38dac2363e567357722e79d0fcc4757ee91ed067e7179a3615bdbd"]},"DuplicateNames":{"src/DuplicateNames.purs":["2021-10-25T20:49:21.240373279Z","5652f5da0ae79185fb27bce13793bd7752779364e0d1c7c56be2d213853c26ad0abff8536a0d34090a079980e498c837026521efe4a8cfc1b1a16ec70c724eed"]},"Example":{"src/Example.purs":["2021-10-25T20:49:21.240373279Z","3b700a99cc5ee257009553d27a2d25f71f68f006e9deec2b3578f01c7fe4e77de1e929dc110dfcd51d68685ad3ab6b09b0147fe63719861e8a9e480a64e286d9"]},"Example2":{"src/Example2.purs":["2021-10-25T20:49:21.240373279Z","6a479db4e40f66b1e29889516a55cfb22b15b2b8c4531b9cf20307a965af3dc0a6dab4eccc31cca4eacaaa158a01c58ff995ac6f01b2e1ed5571c44fa3bf2536"]},"ExplicitExport":{"src/ExplicitExport.purs":["2021-10-25T20:49:21.240373279Z","fe733409eb325c971f84b6414a1fc9e08793d2271eebcd670ceefd5c5aef837ee76ec5cb5bed96d87ea791a7521c76668a71be5cd8fb14209414893dc20d3d47"]},"ExplicitTypeSignatures":{"src/ExplicitTypeSignatures.purs":["2021-10-25T20:49:21.240373279Z","78a70441c9966f04c6c32a74cbba299f0f8ea870c664e738eb0d8f8cc5929edb7bb697170fc306c9ee69fa4e2f0112af15c8bdb29d63645cdf6f2916a122a0bd"]},"ImportedTwice":{"src/ImportedTwice.purs":["2021-10-25T20:49:21.240373279Z","be9a0cb1e75c689c3af6817a5750862915e70a0017476cce4c539a3c7ce5b33554aa14d2668bd131b89bb28d65b5ddaa79abfb2a538d606f1b11b5ef0ec79067"]},"ImportedTwiceA":{"src/ImportedTwiceA.purs":["2021-10-25T20:49:21.240373279Z","883c8abaefe0dbacbcdea4c53eab41da26687680274419720b1e5d6510bf5127b7ba06df23515ad34f7ffc4626f0064d7867e2b4a5f255a6b573d219926364de"]},"ImportedTwiceB":{"src/ImportedTwiceB.purs":["2021-10-25T20:49:21.240373279Z","48cc2ac8ce40b1d0e3782fcb8ec798cf9c4838a595148055f1bb830d9b07d58780170ad3f8a90f43ac561aff2c52a5d8793480526a4768ebf1c8af1ff1b68751"]},"KindSignatureDocs":{"src/KindSignatureDocs.purs":["2022-03-08T13:54:53.122805587Z","c2a224affb04b4c5db4712d15bfa830999c634c135bf1595f4930dd682258f5a278477ffeba297c42af5d74878e73694180a932ee2ebf7ad8a2ff66c4df2135d"]},"MultiVirtual":{"src/MultiVirtual.purs":["2021-10-25T20:49:21.240373279Z","31bc7e2c2ebee39dbc89536db51493a2cb1843a9e1aed8b288ef16660877fd1abd5f4224d3325a415aabcf79bd5fe76ebb9257738b0193a50c79a20d48b5ab29"]},"MultiVirtual1":{"src/MultiVirtual1.purs":["2021-10-25T20:49:21.240373279Z","23f7975f7494bb84f9fc6fde9071ce04e86df774d81e2b027a85ab46c8237f9921ee926f4a4ad3e03c7799e485ce39e542d1dd94953c50c0d58ea0003cfc3842"]},"MultiVirtual2":{"src/MultiVirtual2.purs":["2021-10-25T20:49:21.240373279Z","f424ed7c0db709b6bb1e57f87069f484fd0db9dddd0475cd15d36bd58743e98729c42efd2df6ee8fbd18609c36c2247cf3428a5a7f1f5ed11e233a2b134990ba"]},"MultiVirtual3":{"src/MultiVirtual3.purs":["2021-10-25T20:49:21.240373279Z","a42415e3b8309bfa81ef127c61dba6f4001188dcee160a8e2f73399179a11262f12daf0205d6bec38fc605b637550f16b62e84a0f2a0f6999355d56ff2540405"]},"NewOperators":{"src/NewOperators.purs":["2021-10-25T20:49:21.240373279Z","f74cae05c73db1f629e199692c517866fb1683caab3c4509657a371733f30319f0c505ed57208757b3e43795aab5191000c834a501d9bd2bf0e58875873c5c40"]},"NewOperators2":{"src/NewOperators2.purs":["2021-10-25T20:49:21.240373279Z","c551a91aa792fb9ee4b5758c010761a53d4a14b8fbaa6b76b6bd9a318a28f245c9b090bdc4f77b904c873d9b71d59fbad3ccd9ad7c8773f5c1e57a22a0204844"]},"NotAllCtors":{"src/NotAllCtors.purs":["2021-10-25T20:49:21.240373279Z","6e0af26cf897b5dd6e8dd4d75988e5607118f6fdd5219aa192f477cc4d760d504bdec930d46af82a44950e3de4fe6c37664a4560a523a45097503b85c161bd96"]},"Prelude":{"bower_components/purescript-prelude/src/Prelude.purs":["2021-10-25T20:49:21.236373121Z","7eb0b2f9b7aec29693f79be4642ccea792b1f54c7022a4f1395fb8f3a9b1ad6cbfb2e7685940b89ab21890c02949ec90d4823bd5c36a6b566ca9cb8ec561958f"]},"PrimSubmodules":{"src/PrimSubmodules.purs":["2022-03-18T13:36:14.396639225Z","6b03520e209171032fd18661077ef49b0547b488667b8316e8ec6104a49914fe58929d1dea64fde39ed5a88d814304d0db1d5cd56a3a4b2b5a625585666e42c6"]},"ReExportedTypeClass":{"src/ReExportedTypeClass.purs":["2021-10-25T20:49:21.240373279Z","1cc581d68e1ce113162ab851872e73645807f0deb1d2b970ebc04b314184fe30c3431212ffcf9eec09a56a2291e0050750ac6905f1884bc74d406d0323c4f804"]},"RoleAnnotationDocs":{"src/RoleAnnotationDocs.purs":["2022-03-08T13:54:53.122805587Z","87b1012eaa7e6312ca43aa23efa0ec76eefd72d9e306233a35d4ab9dd3d74ad2051ab11555a5d1136ea2c1800bbfadfa0b52bad30a5a4b9ef3a9aa6498474506"]},"SolitaryTypeClassMember":{"src/SolitaryTypeClassMember.purs":["2021-10-25T20:49:21.240373279Z","f627c589b0a8f58d7bfdf28ecf87891a74e64e8399ce0ab645b7c58049fddc1ea3cbb3c34b862bec8576108d5258d9548ecfbbab98598671cc645a3f358ac852"]},"SomeTypeClass":{"src/SomeTypeClass.purs":["2021-10-25T20:49:21.240373279Z","d09fc77e6c6350e7e4941e2911e012271a49db4a75c57cf738d5865ca622d60b69337f969aa02b13fc869484cba00479212e4b8dbcb458c5723e7a5d73888368"]},"Transitive1":{"src/Transitive1.purs":["2021-10-25T20:49:21.240373279Z","42681f3d0fa143d36474d1cb2f464820bdb907bbc432cd91349f6acdd82657ecb4d9ad1d075c96c551bed37dada4615dd3ff64f912f2cc8a6d99b5e02ee51979"]},"Transitive2":{"src/Transitive2.purs":["2021-10-25T20:49:21.240373279Z","110a1bae420e0f0c05e9846fad483a1d035dfc3ba82c2cd81e44f548fd97965055b1a687ab86256f8cb6a3d79b4c4abe6f45d4728bbc04a7a1b0fedbca115b1e"]},"Transitive3":{"src/Transitive3.purs":["2021-10-25T20:49:21.240373279Z","65f7bb366ac8fab63084ff0229c9d55293db8126b539ff2cb53e511505995f426d50f4cca7d1f61fc53aaaaeed9d72791f9d9f12cc569d92e7bbe1d1908b093c"]},"TypeClassWithFunDeps":{"src/TypeClassWithFunDeps.purs":["2021-10-25T20:49:21.240373279Z","c828f194c8c679d97425ed7e04eb3c9bb04bc4c32542d7d6d7e4a36c6c734eb8ba1ef472ad2b0085d9a042a0724648b85a4605d8fe4995e1a32839b1fb1f0f23"]},"TypeClassWithoutMembers":{"src/TypeClassWithoutMembers.purs":["2021-10-25T20:49:21.240373279Z","3eac42652ce295ee47c340c4b86c91d0f6a8ad1f81824475fa4fc4ae8fd8bb77ceee6a46e31bebe9d2e8a980a7923432b41b0eff5cbf75580ee149e7d997e098"]},"TypeClassWithoutMembersIntermediate":{"src/TypeClassWithoutMembersIntermediate.purs":["2021-10-25T20:49:21.240373279Z","76d65083da1f6240b4c3b6c910af1326b9b9a538f4eb278b00ddf0bf67d9547c1cab0fae7661bbe4af6e7ecdea9fd26cc9ff9ea5b289d3c3994b3ccb3d099ba8"]},"TypeLevelString":{"src/TypeLevelString.purs":["2021-10-25T20:49:21.240373279Z","361dc3825ebd3efcd9a53dd900cc623f5eca14df82afc93f4d485d8b38e51eb0a72929b6cfb783b3d5c9bef46e6fd18c139fdbd10de484beb335e09ecee79388"]},"TypeOpAliases":{"src/TypeOpAliases.purs":["2021-10-25T20:49:21.240373279Z","5f1279d355f0e8f8c7d063950007ba060f0afdb83524fa10361f389d25fdacdf149c907cbdd94cf3d1a77751903701f22ba377203cd3b5d0c40e504699f94249"]},"TypeSynonym":{"src/TypeSynonym.purs":["2021-10-25T20:49:21.240373279Z","d1a0af1c2592e7f150bb0bf1dca4fc82ffe95b4f96be611408828d105d28bb6a4243a4c2799b1c35875a352e51a19464e4507b9c81d9cd34f0f55f8c94898ed9"]},"TypeSynonymInstance":{"src/TypeSynonymInstance.purs":["2021-10-25T20:49:21.240373279Z","336ba7262428a526f3824306f4ac472aebf637181b8aa23d823e6e70641539a14d57b52272d844af3e3a7fa85cdf4094042e464b61622a5a1c290ee8a6684733"]},"UTF8":{"src/UTF8.purs":["2021-10-25T20:49:21.240373279Z","60771c6d4974ef36414775e5a2511e99d08d5ba3945b010d7a399b77b88b310e10ad7d0016f7946ca3f524e7bbd1dce3575f7b2d81f8154bde197a3da411a624"]},"Virtual":{"src/Virtual.purs":["2021-10-25T20:49:21.240373279Z","a1e01c8b1a7c86c86942611649702ebf6689cf7559ce9ca0ba66052eafe64826b0770b33089e72cc26a3c90d75bcf62e0b75a6a90e085e70a6ec946b16456de2"]}}+{"Ado":{"src/Ado.purs":["2022-04-04T14:32:49.37443093Z","bd980ae20d61e0e34d23507b1d25598f27407a78cf70084327506f21cc02d85df1bd1b6937459665a8dd9df5bb43ec5947b6e94c16c852aba233747e05a9d58f"]},"ChildDeclOrder":{"src/ChildDeclOrder.purs":["2022-04-04T14:32:49.37443093Z","41a7be97fffe1bbbf925ccb56b68246abb8684b23529fc25e07827b57b32b60ccd82d5c9a2279dc23be1f8803cff8267fa296509b873ec337ffa15ee0e32e2c9"]},"Clash":{"src/Clash.purs":["2022-04-04T14:32:49.37443093Z","7b70d019ea46b72149e185d82bc1345113e8a3977a886aa31ac8a268c6c63c7b93553e1586c45e023e49e485d3f6523a4a11efc8dc70dd8bac5d8b9cac4e4c2d"]},"Clash1":{"src/Clash1.purs":["2022-04-04T14:32:49.37443093Z","bd09c1fd0308ce61d83bef03d3b2366601df559ef8cc9c09f17d963a1bfb2b2e373dcbf5729a3e465c635fbf0035ae09ea3ba58b7844b56586dc3baf9d857bb5"]},"Clash1a":{"src/Clash1a.purs":["2022-04-04T14:32:49.37443093Z","b5c374c74a46d3f633c948de256e299dc2713857ce09441b5ae2f03afdd0468610088f39854f69848c1c9aecf3441b1b39e0919e499280a19d69b83de07d5d0b"]},"Clash2":{"src/Clash2.purs":["2022-04-04T14:32:49.37443093Z","10c61c6600084fdcc0ee93608a354fd7efa7edab67ac8cce131e522b597080b2927dc7bb1a6c98765dfc9a30583dc5bea2514d2932554ab1657c664a81a0a81b"]},"Clash2a":{"src/Clash2a.purs":["2022-04-04T14:32:49.37443093Z","b002aac5be65ac1cb55d10518840293780ea6d4a42b045172544ab3478ea83252f0672f0e1d4ad1599db3955f55202738ba1ee254b8ad94e914fc43fc1f6750f"]},"ConstrainedArgument":{"src/ConstrainedArgument.purs":["2022-04-04T14:32:49.37443093Z","6caa6cc505c6574957afe8e703f6e9869211e9c0a0676ba36a79d2a8b7e3c2c1570aae714cd6acc37e5b206745941460c1cf370a3bbd783c79b89351681ec890"]},"Data.Newtype":{"bower_components/purescript-newtype/src/Data/Newtype.purs":["2021-11-04T16:46:24.652281269Z","408eb6f95efb52faff05d73c757d21cebdd3b58dce3f5b8cfb5f0772224ca7e6ff9b5df0ab9ea40ce0f8448664fe56028af844b2c5dc32e5712b7d9d1541f2b7"]},"DeclOrder":{"src/DeclOrder.purs":["2022-04-04T14:32:49.37443093Z","a8c6ab9c335037c255ae6e0124a107f2e2462c2eebc2ff3637273ba436f2f3589ae203919ff5c8c61106b0542114ba3eba66426d8b5e316089bc1f4efb72643a"]},"DeclOrderNoExportList":{"src/DeclOrderNoExportList.purs":["2022-04-04T14:32:49.37443093Z","379def50dfd7a01dd2b057c707ea8ee53147d41c7dc28083c3827ccc213816840fd26d784a78bd1eabd105231e5479c7bfeebfcb03d1e2f3e8174ab173d740c4"]},"Desugar":{"src/Desugar.purs":["2022-04-04T14:32:49.37443093Z","50ceefe5cbac286908cc7070f4e94f57c62b5c91245d5a8c66d7f4565e3d037e4cf11524c4c790664588a0a5c4216390b5138be9ec93e14d0f82a2c59c8f561a"]},"DocComments":{"src/DocComments.purs":["2022-04-04T14:32:49.37443093Z","220498626601722feb58dd23dd80ac970f6ba7df8e8c2ad604ed833933f6b36219fb5f1d0b9963ffc7e9314043760055ab547fac5784a28416a4851f257a635b"]},"DocCommentsClassMethod":{"src/DocCommentsClassMethod.purs":["2022-04-04T14:32:49.37443093Z","f55a03f2b2624a9ca01adc8372bad4b7e46e8ef1a52ec41c5992767146c9a2354320a3a38587cbf2e78fec118430f193fdcb1cdd9600cd9f755dbbc2e36e46b7"]},"DocCommentsDataConstructor":{"src/DocCommentsDataConstructor.purs":["2022-04-04T14:32:49.37443093Z","68d644ce63642bd55d8338e78e0070c409d3c970a2967338cf612d7a3217813fd98a08e1905776572819cadbc08cdd4bec4a7c1473974a9f3f5d5b1149d33257"]},"DocCommentsMerge":{"src/DocCommentsMerge.purs":["2022-04-04T14:32:49.37443093Z","08e74333f59b1991e5c044debca1b8d2be7193898cc501c6c422b2f3e4c6e6aba8562cfa7b38dac2363e567357722e79d0fcc4757ee91ed067e7179a3615bdbd"]},"DuplicateNames":{"src/DuplicateNames.purs":["2022-04-04T14:32:49.37443093Z","5652f5da0ae79185fb27bce13793bd7752779364e0d1c7c56be2d213853c26ad0abff8536a0d34090a079980e498c837026521efe4a8cfc1b1a16ec70c724eed"]},"Example":{"src/Example.purs":["2022-04-04T14:32:49.37443093Z","3b700a99cc5ee257009553d27a2d25f71f68f006e9deec2b3578f01c7fe4e77de1e929dc110dfcd51d68685ad3ab6b09b0147fe63719861e8a9e480a64e286d9"]},"Example2":{"src/Example2.purs":["2022-04-04T14:32:49.37443093Z","6a479db4e40f66b1e29889516a55cfb22b15b2b8c4531b9cf20307a965af3dc0a6dab4eccc31cca4eacaaa158a01c58ff995ac6f01b2e1ed5571c44fa3bf2536"]},"ExplicitExport":{"src/ExplicitExport.purs":["2022-04-04T14:32:49.37443093Z","fe733409eb325c971f84b6414a1fc9e08793d2271eebcd670ceefd5c5aef837ee76ec5cb5bed96d87ea791a7521c76668a71be5cd8fb14209414893dc20d3d47"]},"ExplicitTypeSignatures":{"src/ExplicitTypeSignatures.purs":["2022-04-04T14:32:49.37443093Z","78a70441c9966f04c6c32a74cbba299f0f8ea870c664e738eb0d8f8cc5929edb7bb697170fc306c9ee69fa4e2f0112af15c8bdb29d63645cdf6f2916a122a0bd"]},"ImportedTwice":{"src/ImportedTwice.purs":["2022-04-04T14:32:49.37443093Z","be9a0cb1e75c689c3af6817a5750862915e70a0017476cce4c539a3c7ce5b33554aa14d2668bd131b89bb28d65b5ddaa79abfb2a538d606f1b11b5ef0ec79067"]},"ImportedTwiceA":{"src/ImportedTwiceA.purs":["2022-04-04T14:32:49.37443093Z","883c8abaefe0dbacbcdea4c53eab41da26687680274419720b1e5d6510bf5127b7ba06df23515ad34f7ffc4626f0064d7867e2b4a5f255a6b573d219926364de"]},"ImportedTwiceB":{"src/ImportedTwiceB.purs":["2022-04-04T14:32:49.37443093Z","48cc2ac8ce40b1d0e3782fcb8ec798cf9c4838a595148055f1bb830d9b07d58780170ad3f8a90f43ac561aff2c52a5d8793480526a4768ebf1c8af1ff1b68751"]},"KindSignatureDocs":{"src/KindSignatureDocs.purs":["2022-04-04T14:32:49.37443093Z","c2a224affb04b4c5db4712d15bfa830999c634c135bf1595f4930dd682258f5a278477ffeba297c42af5d74878e73694180a932ee2ebf7ad8a2ff66c4df2135d"]},"MultiVirtual":{"src/MultiVirtual.purs":["2022-04-04T14:32:49.37443093Z","31bc7e2c2ebee39dbc89536db51493a2cb1843a9e1aed8b288ef16660877fd1abd5f4224d3325a415aabcf79bd5fe76ebb9257738b0193a50c79a20d48b5ab29"]},"MultiVirtual1":{"src/MultiVirtual1.purs":["2022-04-04T14:32:49.37443093Z","23f7975f7494bb84f9fc6fde9071ce04e86df774d81e2b027a85ab46c8237f9921ee926f4a4ad3e03c7799e485ce39e542d1dd94953c50c0d58ea0003cfc3842"]},"MultiVirtual2":{"src/MultiVirtual2.purs":["2022-04-04T14:32:49.37443093Z","f424ed7c0db709b6bb1e57f87069f484fd0db9dddd0475cd15d36bd58743e98729c42efd2df6ee8fbd18609c36c2247cf3428a5a7f1f5ed11e233a2b134990ba"]},"MultiVirtual3":{"src/MultiVirtual3.purs":["2022-04-04T14:32:49.37443093Z","a42415e3b8309bfa81ef127c61dba6f4001188dcee160a8e2f73399179a11262f12daf0205d6bec38fc605b637550f16b62e84a0f2a0f6999355d56ff2540405"]},"NewOperators":{"src/NewOperators.purs":["2022-04-04T14:32:49.37443093Z","f74cae05c73db1f629e199692c517866fb1683caab3c4509657a371733f30319f0c505ed57208757b3e43795aab5191000c834a501d9bd2bf0e58875873c5c40"]},"NewOperators2":{"src/NewOperators2.purs":["2022-04-04T14:32:49.37443093Z","c551a91aa792fb9ee4b5758c010761a53d4a14b8fbaa6b76b6bd9a318a28f245c9b090bdc4f77b904c873d9b71d59fbad3ccd9ad7c8773f5c1e57a22a0204844"]},"NotAllCtors":{"src/NotAllCtors.purs":["2022-04-04T14:32:49.37443093Z","6e0af26cf897b5dd6e8dd4d75988e5607118f6fdd5219aa192f477cc4d760d504bdec930d46af82a44950e3de4fe6c37664a4560a523a45097503b85c161bd96"]},"OperatorSection":{"src/OperatorSection.purs":["2022-04-20T17:38:32.927702184Z","64a9d1bdc2b7df3fe4124651fee37440b9c53b61d25fba7e9a1974c713c12679f227fdc700a6d97218c3628dce4ea9c8c3c5b4e30b5b8f8ecf6a5f6781599c7b"]},"Prelude":{"bower_components/purescript-prelude/src/Prelude.purs":["2021-10-25T20:49:21.236373121Z","7eb0b2f9b7aec29693f79be4642ccea792b1f54c7022a4f1395fb8f3a9b1ad6cbfb2e7685940b89ab21890c02949ec90d4823bd5c36a6b566ca9cb8ec561958f"]},"PrimSubmodules":{"src/PrimSubmodules.purs":["2022-04-04T14:32:49.378431019Z","6b03520e209171032fd18661077ef49b0547b488667b8316e8ec6104a49914fe58929d1dea64fde39ed5a88d814304d0db1d5cd56a3a4b2b5a625585666e42c6"]},"ReExportedTypeClass":{"src/ReExportedTypeClass.purs":["2022-04-04T14:32:49.378431019Z","1cc581d68e1ce113162ab851872e73645807f0deb1d2b970ebc04b314184fe30c3431212ffcf9eec09a56a2291e0050750ac6905f1884bc74d406d0323c4f804"]},"RoleAnnotationDocs":{"src/RoleAnnotationDocs.purs":["2022-04-04T14:32:49.378431019Z","87b1012eaa7e6312ca43aa23efa0ec76eefd72d9e306233a35d4ab9dd3d74ad2051ab11555a5d1136ea2c1800bbfadfa0b52bad30a5a4b9ef3a9aa6498474506"]},"SolitaryTypeClassMember":{"src/SolitaryTypeClassMember.purs":["2022-04-04T14:32:49.378431019Z","f627c589b0a8f58d7bfdf28ecf87891a74e64e8399ce0ab645b7c58049fddc1ea3cbb3c34b862bec8576108d5258d9548ecfbbab98598671cc645a3f358ac852"]},"SomeTypeClass":{"src/SomeTypeClass.purs":["2022-04-04T14:32:49.378431019Z","d09fc77e6c6350e7e4941e2911e012271a49db4a75c57cf738d5865ca622d60b69337f969aa02b13fc869484cba00479212e4b8dbcb458c5723e7a5d73888368"]},"Transitive1":{"src/Transitive1.purs":["2022-04-04T14:32:49.378431019Z","42681f3d0fa143d36474d1cb2f464820bdb907bbc432cd91349f6acdd82657ecb4d9ad1d075c96c551bed37dada4615dd3ff64f912f2cc8a6d99b5e02ee51979"]},"Transitive2":{"src/Transitive2.purs":["2022-04-04T14:32:49.378431019Z","110a1bae420e0f0c05e9846fad483a1d035dfc3ba82c2cd81e44f548fd97965055b1a687ab86256f8cb6a3d79b4c4abe6f45d4728bbc04a7a1b0fedbca115b1e"]},"Transitive3":{"src/Transitive3.purs":["2022-04-04T14:32:49.378431019Z","65f7bb366ac8fab63084ff0229c9d55293db8126b539ff2cb53e511505995f426d50f4cca7d1f61fc53aaaaeed9d72791f9d9f12cc569d92e7bbe1d1908b093c"]},"TypeClassWithFunDeps":{"src/TypeClassWithFunDeps.purs":["2022-04-04T14:32:49.378431019Z","c828f194c8c679d97425ed7e04eb3c9bb04bc4c32542d7d6d7e4a36c6c734eb8ba1ef472ad2b0085d9a042a0724648b85a4605d8fe4995e1a32839b1fb1f0f23"]},"TypeClassWithoutMembers":{"src/TypeClassWithoutMembers.purs":["2022-04-04T14:32:49.378431019Z","3eac42652ce295ee47c340c4b86c91d0f6a8ad1f81824475fa4fc4ae8fd8bb77ceee6a46e31bebe9d2e8a980a7923432b41b0eff5cbf75580ee149e7d997e098"]},"TypeClassWithoutMembersIntermediate":{"src/TypeClassWithoutMembersIntermediate.purs":["2022-04-04T14:32:49.378431019Z","76d65083da1f6240b4c3b6c910af1326b9b9a538f4eb278b00ddf0bf67d9547c1cab0fae7661bbe4af6e7ecdea9fd26cc9ff9ea5b289d3c3994b3ccb3d099ba8"]},"TypeLevelString":{"src/TypeLevelString.purs":["2022-04-04T14:32:49.378431019Z","361dc3825ebd3efcd9a53dd900cc623f5eca14df82afc93f4d485d8b38e51eb0a72929b6cfb783b3d5c9bef46e6fd18c139fdbd10de484beb335e09ecee79388"]},"TypeOpAliases":{"src/TypeOpAliases.purs":["2022-04-04T14:32:49.378431019Z","5f1279d355f0e8f8c7d063950007ba060f0afdb83524fa10361f389d25fdacdf149c907cbdd94cf3d1a77751903701f22ba377203cd3b5d0c40e504699f94249"]},"TypeSynonym":{"src/TypeSynonym.purs":["2022-04-04T14:32:49.378431019Z","d1a0af1c2592e7f150bb0bf1dca4fc82ffe95b4f96be611408828d105d28bb6a4243a4c2799b1c35875a352e51a19464e4507b9c81d9cd34f0f55f8c94898ed9"]},"TypeSynonymInstance":{"src/TypeSynonymInstance.purs":["2022-04-04T14:32:49.378431019Z","336ba7262428a526f3824306f4ac472aebf637181b8aa23d823e6e70641539a14d57b52272d844af3e3a7fa85cdf4094042e464b61622a5a1c290ee8a6684733"]},"UTF8":{"src/UTF8.purs":["2022-04-04T14:32:49.378431019Z","60771c6d4974ef36414775e5a2511e99d08d5ba3945b010d7a399b77b88b310e10ad7d0016f7946ca3f524e7bbd1dce3575f7b2d81f8154bde197a3da411a624"]},"Virtual":{"src/Virtual.purs":["2022-04-04T14:32:49.378431019Z","a1e01c8b1a7c86c86942611649702ebf6689cf7559ce9ca0ba66052eafe64826b0770b33089e72cc26a3c90d75bcf62e0b75a6a90e085e70a6ec946b16456de2"]}}
+ tests/purs/docs/src/OperatorSection.purs view
@@ -0,0 +1,16 @@+module OperatorSection where++data List a = Nil | Cons a (List a)++infixr 6 Cons as :++class Foldable f where+  foldl :: forall a b. (b -> a -> b) -> b -> f a -> b++instance Foldable List where+  -- Note: this is not a valid `Foldable` instance,+  -- but it verifies that producing docs for+  -- this file still works. See #4274 for more details.+  foldl f b = case _ of+    Nil -> b+    a : _as -> f b a
tests/purs/docs/src/PrimSubmodules.purs view
@@ -1,6 +1,6 @@ module PrimSubmodules (Lol(..), x, y, module O) where -import Prim.Ordering (kind Ordering, LT, EQ, GT) as O+import Prim.Ordering (Ordering, LT, EQ, GT) as O  data Lol (a :: O.Ordering) = Lol Int 
tests/purs/failing/2109-bind.out view
@@ -2,7 +2,7 @@ in module [33mMain[0m at tests/purs/failing/2109-bind.purs:8:3 - 8:14 (line 8, column 3 - line 8, column 14) -  Unknown value [33mbind[0m. You're probably using do-notation, which the compiler replaces with calls to the [33mbind[0m function. Please import [33mbind[0m from module [33mPrelude[0m+  Unknown value [33mbind[0m. You're probably using do-notation, which the compiler replaces with calls to the [33mbind[0m and [33mdiscard[0m functions. Please import [33mbind[0m from module [33mPrelude[0m   See https://github.com/purescript/documentation/blob/master/errors/UnknownName.md for more information,
tests/purs/failing/2109-discard.out view
@@ -2,7 +2,7 @@ in module [33mMain[0m at tests/purs/failing/2109-discard.purs:7:3 - 7:12 (line 7, column 3 - line 7, column 12) -  Unknown value [33mdiscard[0m. You're probably using do-notation, which the compiler replaces with calls to the [33mdiscard[0m function. Please import [33mdiscard[0m from module [33mPrelude[0m+  Unknown value [33mdiscard[0m. You're probably using do-notation, which the compiler replaces with calls to the [33mbind[0m and [33mdiscard[0m functions. Please import [33mdiscard[0m from module [33mPrelude[0m   See https://github.com/purescript/documentation/blob/master/errors/UnknownName.md for more information,
+ tests/purs/failing/3329.out view
@@ -0,0 +1,28 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3329.purs:24:8 - 24:11 (line 24, column 8 - line 24, column 11)++  No type class instance was found for+  [33m                            [0m+  [33m  Main.Inject g0            [0m+  [33m              (Either f1 g0)[0m+  [33m                            [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:++    [33mMain.injectLeft[0m+++while checking that type [33mforall (f :: Type) (g :: Type). Inject f g => f -> g[0m+  is at least as general as type [33mg0 -> Either f1 g0[0m+while checking that expression [33minj[0m+  has type [33mg0 -> Either f1 g0[0m+in value declaration [33minjR[0m++where [33mf1[0m is a rigid type variable+        bound at (line 24, column 8 - line 24, column 11)+      [33mg0[0m is a rigid type variable+        bound at (line 24, column 8 - line 24, column 11)++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3329.purs view
@@ -0,0 +1,24 @@+-- @shouldFailWith NoInstanceFound+module Main where++import Data.Either (Either(..))+import Data.Maybe (Maybe(..))++class Inject f g where+  inj :: f -> g+  prj :: g -> Maybe f++instance injectRefl :: Inject x x where+  inj x = x+  prj x = Just x+else instance injectLeft :: Inject l (Either l r) where+  inj x = Left x+  prj (Left x) = Just x+  prj _ = Nothing+else instance injectRight :: Inject x r => Inject x (Either l r) where+  inj x = Right (inj x)+  prj (Right x) = prj x+  prj _ = Nothing++injR :: forall f g. g -> Either f g+injR = inj
+ tests/purs/failing/3531-2.out view
@@ -0,0 +1,27 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3531-2.purs:22:11 - 22:22 (line 22, column 11 - line 22, column 22)++  No type class instance was found for+  [33m                   [0m+  [33m  Main.C (X t2 Int)[0m+  [33m                   [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:++    [33mMain.cx[0m++  The instance head contains unknown type variables. Consider adding a type annotation.++while applying a function [33mthing[0m+  of type [33mC t0 => t0 -> t0[0m+  to argument [33mtest1[0m+while inferring the type of [33mthing test1[0m+in value declaration [33mtest2[0m++where [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type+      [33mt2[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3531-2.purs view
@@ -0,0 +1,23 @@+-- @shouldFailWith NoInstanceFound+module Main where++import Prim.TypeError (class Fail, Text)++class C x where+  thing :: x -> x++data X a b = X++test1 :: forall a. X a Int+test1 = X++instance cx :: C (X x x) where+  thing x = x++else instance cxFail :: Fail (Text "Fell through") => C (X x y) where+  thing x = x++test2 :: Boolean+test2 = do+  let X = thing test1+  true
+ tests/purs/failing/3531-3.out view
@@ -0,0 +1,32 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3531-3.purs:22:11 - 22:22 (line 22, column 11 - line 22, column 22)++  No type class instance was found for+  [33m                        [0m+  [33m  Main.C (X             [0m+  [33m            { foo :: Int[0m+  [33m            | t1        [0m+  [33m            }           [0m+  [33m            { foo :: Int[0m+  [33m            }           [0m+  [33m         )              [0m+  [33m                        [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:++    [33mMain.cx[0m++  The instance head contains unknown type variables. Consider adding a type annotation.++while applying a function [33mthing[0m+  of type [33mC t0 => t0 -> t0[0m+  to argument [33mtest1[0m+while inferring the type of [33mthing test1[0m+in value declaration [33mtest2[0m++where [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3531-3.purs view
@@ -0,0 +1,23 @@+-- @shouldFailWith NoInstanceFound+module Main where++import Prim.TypeError (class Fail, Text)++class C x where+  thing :: x -> x++data X a b = X++test1 :: forall r. X { foo :: Int | r } { foo :: Int }+test1 = X++instance cx :: C (X x x) where+  thing x = x++else instance cxFail :: Fail (Text "Fell through") => C (X x y) where+  thing x = x++test2 :: Boolean+test2 = do+  let X = thing test1+  true
+ tests/purs/failing/3531-4.out view
@@ -0,0 +1,33 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3531-4.purs:21:7 - 21:27 (line 21, column 7 - line 21, column 27)++  No type class instance was found for+  [33m           [0m+  [33m  Main.C a4[0m+  [33m         b5[0m+  [33m           [0m+  The following instances partially overlap the above constraint, which means the rest of their instance chains will not be considered:++    [33mMain.c1[0m+    [33mMain.c3[0m+++while applying a function [33mc[0m+  of type [33mC @t0 @t1 t2 t3 => Proxy @t0 t2 -> Proxy @t1 t3 -> Boolean[0m+  to argument [33mProxy[0m+while inferring the type of [33mc Proxy[0m+in value declaration [33mfn[0m++where [33ma4[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mb5[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type+      [33mt2[0m is an unknown type+      [33mt3[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3531-4.purs view
@@ -0,0 +1,21 @@+-- @shouldFailWith NoInstanceFound+module Main where++data Proxy a = Proxy++class C a b where+  c :: Proxy a -> Proxy b -> Boolean++instance c1 :: C String String where+  c _ _ = true+else instance c2 :: C String a where+  c _ _ = false++instance c3 :: C Int Int where+  c _ _ = true+else instance c4 :: C Int a where+  c _ _ = false++fn :: forall a b. Proxy a -> Proxy b -> Int+fn _ _ = 42 where+  x = c (Proxy :: Proxy a) (Proxy :: Proxy b)
+ tests/purs/failing/3531-5.out view
@@ -0,0 +1,32 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3531-5.purs:16:7 - 16:27 (line 16, column 7 - line 16, column 27)++  No type class instance was found for+  [33m           [0m+  [33m  Main.C a4[0m+  [33m         b5[0m+  [33m           [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:++    instance in module [33mMain[0m with type [33mforall a. C String (Array a)[0m (line 9, column 1 - line 10, column 15)+++while applying a function [33mc[0m+  of type [33mC @t0 @t1 t2 t3 => Proxy @t0 t2 -> Proxy @t1 t3 -> Boolean[0m+  to argument [33mProxy[0m+while inferring the type of [33mc Proxy[0m+in value declaration [33mfn[0m++where [33ma4[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mb5[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type+      [33mt2[0m is an unknown type+      [33mt3[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3531-5.purs view
@@ -0,0 +1,16 @@+-- @shouldFailWith NoInstanceFound+module Main where++data Proxy a = Proxy++class C a b where+  c :: Proxy a -> Proxy b -> Boolean++instance C String (Array a) where+  c _ _ = true+else instance c2 :: C String a where+  c _ _ = false++fn :: forall a b. Proxy a -> Proxy b -> Int+fn _ _ = 42 where+  x = c (Proxy :: Proxy a) (Proxy :: Proxy b)
+ tests/purs/failing/3531-6.out view
@@ -0,0 +1,33 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3531-6.purs:21:7 - 21:27 (line 21, column 7 - line 21, column 27)++  No type class instance was found for+  [33m           [0m+  [33m  Main.C a4[0m+  [33m         b5[0m+  [33m           [0m+  The following instances partially overlap the above constraint, which means the rest of their instance chains will not be considered:++    instance in module [33mMain[0m with type [33mforall a. C String (Array a)[0m (line 9, column 1 - line 10, column 15)+    instance in module [33mMain[0m with type [33mC Int Int[0m (line 14, column 1 - line 15, column 15)+++while applying a function [33mc[0m+  of type [33mC @t0 @t1 t2 t3 => Proxy @t0 t2 -> Proxy @t1 t3 -> Boolean[0m+  to argument [33mProxy[0m+while inferring the type of [33mc Proxy[0m+in value declaration [33mfn[0m++where [33ma4[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mb5[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type+      [33mt2[0m is an unknown type+      [33mt3[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3531-6.purs view
@@ -0,0 +1,21 @@+-- @shouldFailWith NoInstanceFound+module Main where++data Proxy a = Proxy++class C a b where+  c :: Proxy a -> Proxy b -> Boolean++instance C String (Array a) where+  c _ _ = true+else instance c2 :: C String a where+  c _ _ = false++instance C Int Int where+  c _ _ = true+else instance c4 :: C Int a where+  c _ _ = false++fn :: forall a b. Proxy a -> Proxy b -> Int+fn _ _ = 42 where+  x = c (Proxy :: Proxy a) (Proxy :: Proxy b)
+ tests/purs/failing/3531.out view
@@ -0,0 +1,27 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/3531.purs:16:7 - 16:27 (line 16, column 7 - line 16, column 27)++  No type class instance was found for+  [33m           [0m+  [33m  Main.C a2[0m+  [33m           [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:++    [33mMain.c1[0m+++while applying a function [33mc[0m+  of type [33mC @t0 t1 => Proxy @t0 t1 -> Boolean[0m+  to argument [33mProxy[0m+while inferring the type of [33mc Proxy[0m+in value declaration [33mfn[0m++where [33ma2[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/3531.purs view
@@ -0,0 +1,16 @@+-- @shouldFailWith NoInstanceFound+module Main where++data Proxy a = Proxy++class C a where+  c :: Proxy a -> Boolean++instance c1 :: C String where+  c _ = true+else instance c2 :: C a where+  c _ = false++fn :: forall a. Proxy a -> Int+fn _ = 42 where+  x = c (Proxy :: Proxy a)
+ tests/purs/failing/4028.out view
@@ -0,0 +1,27 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/4028.purs:29:12 - 29:37 (line 29, column 12 - line 29, column 37)++  No type class instance was found for+  [33m                    [0m+  [33m  Main.TLShow (S i2)[0m+  [33m                    [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered:++    [33mMain.tlShow2[0m+++while applying a function [33mgo[0m+  of type [33mTLShow @t0 t1 => Proxy @t0 t1 -> Int -> String[0m+  to argument [33mProxy[0m+while inferring the type of [33mgo Proxy[0m+in value declaration [33mpeano[0m++where [33mi2[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/4028.purs view
@@ -0,0 +1,29 @@+-- @shouldFailWith NoInstanceFound+module Main where++import Prelude++import Type.Proxy (Proxy(..))++foreign import data Peano :: Type++foreign import data Z :: Peano+foreign import data S :: Peano -> Peano++class TLShow :: forall k. k -> Constraint+class TLShow i where+  tlShow :: Proxy i -> String++instance tlShow2 :: TLShow (S (S Z)) where+  tlShow _ = "2"+else instance tlShow0 :: TLShow Z where+  tlShow _ = "0"+else instance tlShowS :: TLShow x => TLShow (S x) where+  tlShow _ = "S" <> tlShow (Proxy :: Proxy x)++peano :: Int -> String+peano = go (Proxy :: Proxy Z)+  where+  go :: forall i. TLShow i => Proxy i -> Int -> String+  go p 0 = tlShow p+  go _ n = go (Proxy :: Proxy (S i)) (n - 1)
tests/purs/failing/AnonArgument1.out view
@@ -1,5 +1,5 @@ Error found:-at tests/purs/failing/AnonArgument1.purs:5:1 - 5:9 (line 5, column 1 - line 5, column 9)+at tests/purs/failing/AnonArgument1.purs:5:8 - 5:9 (line 5, column 8 - line 5, column 9)    An anonymous function argument appears in an invalid context. 
tests/purs/failing/AnonArgument2.out view
@@ -1,5 +1,5 @@ Error found:-at tests/purs/failing/AnonArgument2.purs:7:1 - 7:17 (line 7, column 1 - line 7, column 17)+at tests/purs/failing/AnonArgument2.purs:7:16 - 7:17 (line 7, column 16 - line 7, column 17)    An anonymous function argument appears in an invalid context. 
tests/purs/failing/AnonArgument3.out view
@@ -1,5 +1,5 @@ Error found:-at tests/purs/failing/AnonArgument3.purs:5:1 - 5:13 (line 5, column 1 - line 5, column 13)+at tests/purs/failing/AnonArgument3.purs:7:12 - 7:13 (line 7, column 12 - line 7, column 13)    An anonymous function argument appears in an invalid context. 
tests/purs/failing/AnonArgument3.purs view
@@ -1,5 +1,7 @@ -- @shouldFailWith IncorrectAnonymousArgument module Main where +import Prelude+ test :: Int -> Int test = 1 + _
+ tests/purs/failing/CompareInt1.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt1.purs:14:16 - 14:29 (line 14, column 16 - line 14, column 29)++  Could not match type+  [33m    [0m+  [33m  EQ[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare a0[0m+[33m                   b1[0m+[33m                   GT[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r GT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: a0  [0m+                                 [33m  , right :: b1 [0m+                                 [33m  )             [0m+while checking that expression [33massertGreater[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: a0  [0m+           [33m  , right :: b1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mb1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt1.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertGreater :: forall l r. Compare l r GT => Proxy ( left :: l, right :: r )+assertGreater = Proxy++impossible :: forall a b c. Compare a b EQ => Compare b c GT => Proxy c -> Proxy ( left :: a, right :: b )+impossible _ = assertGreater
+ tests/purs/failing/CompareInt10.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt10.purs:14:16 - 14:27 (line 14, column 16 - line 14, column 27)++  Could not match type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  EQ[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare c0[0m+[33m                   a1[0m+[33m                   EQ[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r EQ => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: c0  [0m+                                 [33m  , right :: a1 [0m+                                 [33m  )             [0m+while checking that expression [33massertEqual[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: c0  [0m+           [33m  , right :: a1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mc0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt10.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertEqual :: forall l r. Compare l r EQ => Proxy ( left :: l, right :: r )+assertEqual = Proxy++impossible :: forall a b c. Compare a b GT => Compare b c GT => Proxy c -> Proxy ( left :: c, right :: a )+impossible _ = assertEqual
+ tests/purs/failing/CompareInt11.out view
@@ -0,0 +1,33 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt11.purs:14:14 - 14:26 (line 14, column 14 - line 14, column 26)++  No type class instance was found for+  [33m                     [0m+  [33m  Prim.Int.Compare a0[0m+  [33m                   5 [0m+  [33m                   LT[0m+  [33m                     [0m++while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r LT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: a0  [0m+                                 [33m  , right :: 5  [0m+                                 [33m  )             [0m+while checking that expression [33massertLesser[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: a0  [0m+           [33m  , right :: 5  [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma0[0m is a rigid type variable+        bound at (line 14, column 14 - line 14, column 26)++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt11.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith NoInstanceFound+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertLesser :: forall l r. Compare l r LT => Proxy ( left :: l, right :: r )+assertLesser = Proxy++impossible :: forall a. Compare a 10 LT => Proxy ( left :: a, right :: 5 )+impossible = assertLesser
+ tests/purs/failing/CompareInt12.out view
@@ -0,0 +1,33 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt12.purs:14:14 - 14:27 (line 14, column 14 - line 14, column 27)++  No type class instance was found for+  [33m                     [0m+  [33m  Prim.Int.Compare a0[0m+  [33m                   20[0m+  [33m                   GT[0m+  [33m                     [0m++while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r GT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: a0  [0m+                                 [33m  , right :: 20 [0m+                                 [33m  )             [0m+while checking that expression [33massertGreater[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: a0  [0m+           [33m  , right :: 20 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma0[0m is a rigid type variable+        bound at (line 14, column 14 - line 14, column 27)++See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt12.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith NoInstanceFound+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertGreater :: forall l r. Compare l r GT => Proxy ( left :: l, right :: r )+assertGreater = Proxy++impossible :: forall a. Compare a 10 GT => Proxy ( left :: a, right :: 20 )+impossible = assertGreater
+ tests/purs/failing/CompareInt2.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt2.purs:14:14 - 14:27 (line 14, column 14 - line 14, column 27)++  Could not match type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare b0[0m+[33m                   a1[0m+[33m                   GT[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r GT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: b0  [0m+                                 [33m  , right :: a1 [0m+                                 [33m  )             [0m+while checking that expression [33massertGreater[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: b0  [0m+           [33m  , right :: a1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma1[0m is a rigid type variable+        bound at (line 14, column 14 - line 14, column 27)+      [33mb0[0m is a rigid type variable+        bound at (line 14, column 14 - line 14, column 27)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt2.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertGreater :: forall l r. Compare l r GT => Proxy ( left :: l, right :: r )+assertGreater = Proxy++impossible :: forall a b. Compare a b GT => Proxy ( left :: b, right :: a )+impossible = assertGreater
+ tests/purs/failing/CompareInt3.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt3.purs:14:16 - 14:28 (line 14, column 16 - line 14, column 28)++  Could not match type+  [33m    [0m+  [33m  EQ[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare a0[0m+[33m                   b1[0m+[33m                   LT[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r LT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: a0  [0m+                                 [33m  , right :: b1 [0m+                                 [33m  )             [0m+while checking that expression [33massertLesser[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: a0  [0m+           [33m  , right :: b1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mb1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt3.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertLesser :: forall l r. Compare l r LT => Proxy ( left :: l, right :: r )+assertLesser = Proxy++impossible :: forall a b c. Compare a b EQ => Compare b c LT => Proxy c -> Proxy ( left :: a, right :: b )+impossible _ = assertLesser
+ tests/purs/failing/CompareInt4.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt4.purs:14:14 - 14:26 (line 14, column 14 - line 14, column 26)++  Could not match type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare b0[0m+[33m                   a1[0m+[33m                   LT[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r LT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: b0  [0m+                                 [33m  , right :: a1 [0m+                                 [33m  )             [0m+while checking that expression [33massertLesser[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: b0  [0m+           [33m  , right :: a1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma1[0m is a rigid type variable+        bound at (line 14, column 14 - line 14, column 26)+      [33mb0[0m is a rigid type variable+        bound at (line 14, column 14 - line 14, column 26)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt4.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertLesser :: forall l r. Compare l r LT => Proxy ( left :: l, right :: r )+assertLesser = Proxy++impossible :: forall a b. Compare a b LT => Proxy ( left :: b, right :: a )+impossible = assertLesser
+ tests/purs/failing/CompareInt5.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt5.purs:14:16 - 14:29 (line 14, column 16 - line 14, column 29)++  Could not match type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare c0[0m+[33m                   a1[0m+[33m                   GT[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r GT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: c0  [0m+                                 [33m  , right :: a1 [0m+                                 [33m  )             [0m+while checking that expression [33massertGreater[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: c0  [0m+           [33m  , right :: a1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mc0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt5.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertGreater :: forall l r. Compare l r GT => Proxy ( left :: l, right :: r )+assertGreater = Proxy++impossible :: forall a b c. Compare a b GT => Compare b c GT => Proxy c -> Proxy ( left :: c, right :: a )+impossible _ = assertGreater
+ tests/purs/failing/CompareInt6.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt6.purs:14:16 - 14:28 (line 14, column 16 - line 14, column 28)++  Could not match type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare c0[0m+[33m                   a1[0m+[33m                   LT[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r LT => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: c0  [0m+                                 [33m  , right :: a1 [0m+                                 [33m  )             [0m+while checking that expression [33massertLesser[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: c0  [0m+           [33m  , right :: a1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mc0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt6.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertLesser :: forall l r. Compare l r LT => Proxy ( left :: l, right :: r )+assertLesser = Proxy++impossible :: forall a b c. Compare a b LT => Compare b c LT => Proxy c -> Proxy ( left :: c, right :: a )+impossible _ = assertLesser
+ tests/purs/failing/CompareInt7.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt7.purs:14:16 - 14:27 (line 14, column 16 - line 14, column 27)++  Could not match type+  [33m    [0m+  [33m  LT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  EQ[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare a0[0m+[33m                   c1[0m+[33m                   EQ[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r EQ => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: a0  [0m+                                 [33m  , right :: c1 [0m+                                 [33m  )             [0m+while checking that expression [33massertEqual[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: a0  [0m+           [33m  , right :: c1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mc1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt7.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertEqual :: forall l r. Compare l r EQ => Proxy ( left :: l, right :: r )+assertEqual = Proxy++impossible :: forall a b c. Compare a b LT => Compare b c LT => Proxy c -> Proxy ( left :: a, right :: c )+impossible _ = assertEqual
+ tests/purs/failing/CompareInt8.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt8.purs:14:16 - 14:27 (line 14, column 16 - line 14, column 27)++  Could not match type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  EQ[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare a0[0m+[33m                   c1[0m+[33m                   EQ[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r EQ => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: a0  [0m+                                 [33m  , right :: c1 [0m+                                 [33m  )             [0m+while checking that expression [33massertEqual[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: a0  [0m+           [33m  , right :: c1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mc1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt8.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertEqual :: forall l r. Compare l r EQ => Proxy ( left :: l, right :: r )+assertEqual = Proxy++impossible :: forall a b c. Compare a b GT => Compare b c GT => Proxy c -> Proxy ( left :: a, right :: c )+impossible _ = assertEqual
+ tests/purs/failing/CompareInt9.out view
@@ -0,0 +1,43 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/CompareInt9.purs:14:16 - 14:27 (line 14, column 16 - line 14, column 27)++  Could not match type+  [33m    [0m+  [33m  GT[0m+  [33m    [0m+  with type+  [33m    [0m+  [33m  EQ[0m+  [33m    [0m++while solving type class constraint+[33m                     [0m+[33m  Prim.Int.Compare c0[0m+[33m                   a1[0m+[33m                   EQ[0m+[33m                     [0m+while checking that type [33mforall (l :: Int) (r :: Int).       [0m+                         [33m  Compare l r EQ => Proxy @(Row Int)[0m+                         [33m                      ( left :: l   [0m+                         [33m                      , right :: r  [0m+                         [33m                      )             [0m+  is at least as general as type [33mProxy @(Row Int)[0m+                                 [33m  ( left :: c0  [0m+                                 [33m  , right :: a1 [0m+                                 [33m  )             [0m+while checking that expression [33massertEqual[0m+  has type [33mProxy @(Row Int)[0m+           [33m  ( left :: c0  [0m+           [33m  , right :: a1 [0m+           [33m  )             [0m+in value declaration [33mimpossible[0m++where [33ma1[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)+      [33mc0[0m is a rigid type variable+        bound at (line 0, column 0 - line 0, column 0)++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/CompareInt9.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertEqual :: forall l r. Compare l r EQ => Proxy ( left :: l, right :: r )+assertEqual = Proxy++impossible :: forall a b c. Compare a b LT => Compare b c LT => Proxy c -> Proxy ( left :: c, right :: a )+impossible _ = assertEqual
+ tests/purs/failing/ConstraintInForeignImport.js view
@@ -0,0 +1,5 @@+export var show = function (showDict) {+  return function (a) {+    return showDict.show(a);+  };+};
+ tests/purs/failing/ConstraintInForeignImport.out view
@@ -0,0 +1,10 @@+Error found:+at tests/purs/failing/ConstraintInForeignImport.purs:6:1 - 6:50 (line 6, column 1 - line 6, column 50)++  Unable to parse module:+  Constraints are not allowed in foreign imports. Omit the constraint instead and update the foreign module accordingly.+++See https://github.com/purescript/documentation/blob/master/errors/ErrorParsingModule.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/ConstraintInForeignImport.purs view
@@ -0,0 +1,6 @@+-- @shouldFailWith ErrorParsingModule+module Main where++import Data.Show (class Show)++foreign import show :: ∀ a. Show a => a -> String
tests/purs/failing/ConstraintInference.out view
@@ -4,11 +4,11 @@    The inferred type   [33m                                         [0m-  [33m  forall t8 t11. Show t8 => t11 -> String[0m+  [33m  forall c8 t11. Show c8 => t11 -> String[0m   [33m                                         [0m   has type variables which are not determined by those mentioned in the body of the type: -    [33mt8[0m could not be determined+    [33mc8[0m could not be determined    Consider adding a type annotation. 
+ tests/purs/failing/DeprecatedFFICommonJSModule.js view
@@ -0,0 +1,4 @@+"use strict";++exports.yes = true;+exports.no = true;
+ tests/purs/failing/DeprecatedFFICommonJSModule.out view
@@ -0,0 +1,13 @@+Error found:+at tests/purs/failing/DeprecatedFFICommonJSModule.purs:2:1 - 5:29 (line 2, column 1 - line 5, column 29)++  A CommonJS foreign module implementation was provided for module [33mMain[0m:++    tests/purs/failing/DeprecatedFFICommonJSModule.js++  CommonJS foreign modules are no longer supported. Use native JavaScript/ECMAScript module syntax instead.+++See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFICommonJSModule.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/DeprecatedFFICommonJSModule.purs view
@@ -0,0 +1,5 @@+-- @shouldFailWith DeprecatedFFICommonJSModule+module Main where++foreign import yes :: Boolean+foreign import no :: Boolean
+ tests/purs/failing/DeprecatedFFIPrime.js view
@@ -0,0 +1,5 @@+exports['a\''] = 0;+exports["\x62\x27"] = 1;+// NOTE: I wanted to use "\c'" here, but langauge-javascript doesn't support it...+exports["c'"] = 2;+exports["\u0064\u0027"] = 3;
+ tests/purs/failing/DeprecatedFFIPrime.out view
@@ -0,0 +1,56 @@+Error 1 of 4:++  at tests/purs/failing/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)++    In the FFI module for [33mMain[0m:++      The identifier [33ma'[0m contains a prime ([33m'[0m).+      Primes are not allowed in identifiers exported from FFI modules.++++  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,+  or to contribute content related to this error.++Error 2 of 4:++  at tests/purs/failing/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)++    In the FFI module for [33mMain[0m:++      The identifier [33mb'[0m contains a prime ([33m'[0m).+      Primes are not allowed in identifiers exported from FFI modules.++++  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,+  or to contribute content related to this error.++Error 3 of 4:++  at tests/purs/failing/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)++    In the FFI module for [33mMain[0m:++      The identifier [33mc'[0m contains a prime ([33m'[0m).+      Primes are not allowed in identifiers exported from FFI modules.++++  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,+  or to contribute content related to this error.++Error 4 of 4:++  at tests/purs/failing/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)++    In the FFI module for [33mMain[0m:++      The identifier [33md'[0m contains a prime ([33m'[0m).+      Primes are not allowed in identifiers exported from FFI modules.++++  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,+  or to contribute content related to this error.+
+ tests/purs/failing/DeprecatedFFIPrime.purs view
@@ -0,0 +1,10 @@+-- @shouldFailWith DeprecatedFFIPrime+-- @shouldFailWith DeprecatedFFIPrime+-- @shouldFailWith DeprecatedFFIPrime+-- @shouldFailWith DeprecatedFFIPrime+module Main where++foreign import a' :: Number+foreign import b' :: Number+foreign import c' :: Number+foreign import d' :: Number
tests/purs/failing/DiffKindsSameName/LibA.purs view
@@ -1,4 +1,4 @@ module DiffKindsSameName.LibA where -foreign import kind DemoKind+data DemoKind 
tests/purs/failing/DiffKindsSameName/LibB.purs view
@@ -1,6 +1,6 @@ module DiffKindsSameName.LibB where -foreign import kind DemoKind+data DemoKind  foreign import data DemoData :: DemoKind 
tests/purs/failing/DuplicateProperties.purs view
@@ -3,7 +3,7 @@  import Prelude -foreign import data Test :: # Type -> Type+foreign import data Test :: Row Type -> Type  foreign import subtractX :: forall r. Test (x :: Unit | r) -> Test r 
+ tests/purs/failing/FFIDefaultCJSExport.js view
@@ -0,0 +1,1 @@+exports.default = "Done";
+ tests/purs/failing/FFIDefaultCJSExport.out view
@@ -0,0 +1,13 @@+Error found:+at tests/purs/failing/FFIDefaultCJSExport.purs:2:1 - 8:19 (line 2, column 1 - line 8, column 19)++  A CommonJS foreign module implementation was provided for module [33mMain[0m:++    tests/purs/failing/FFIDefaultCJSExport.js++  CommonJS foreign modules are no longer supported. Use native JavaScript/ECMAScript module syntax instead.+++See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFICommonJSModule.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/FFIDefaultCJSExport.purs view
@@ -0,0 +1,8 @@+-- @shouldFailWith DeprecatedFFICommonJSModule+module Main where++import Effect.Console (log)++foreign import default :: String++main = log default
tests/purs/failing/Generalization2.out view
@@ -5,7 +5,7 @@   Unable to generalize the type of the recursive function [33mtest[0m.   The inferred type of [33mtest[0m was:   [33m                                            [0m-  [33m  forall t7. Semigroup t7 => Int -> t7 -> t7[0m+  [33m  forall a7. Semigroup a7 => Int -> a7 -> a7[0m   [33m                                            [0m   Try adding a type signature. 
tests/purs/failing/InstanceChainBothUnknownAndMatch.out view
@@ -1,26 +1,30 @@ Error found: in module [33mInstanceChains.BothUnknownAndMatch[0m-at tests/purs/failing/InstanceChainBothUnknownAndMatch.purs:17:13 - 17:55 (line 17, column 13 - line 17, column 55)+at tests/purs/failing/InstanceChainBothUnknownAndMatch.purs:15:13 - 15:53 (line 15, column 13 - line 15, column 53)    No type class instance was found for   [33m                                                       [0m-  [33m  InstanceChains.BothUnknownAndMatch.Same (RProxy      [0m+  [33m  InstanceChains.BothUnknownAndMatch.Same (Proxy       [0m   [33m                                             ( m :: Int[0m   [33m                                             , u :: t3 [0m   [33m                                             )         [0m   [33m                                          )            [0m-  [33m                                          (RProxy      [0m+  [33m                                          (Proxy       [0m   [33m                                             ( m :: Int[0m   [33m                                             , u :: Int[0m   [33m                                             )         [0m   [33m                                          )            [0m   [33m                                          t4           [0m   [33m                                                       [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered: +    [33mInstanceChains.BothUnknownAndMatch.sameY[0m++ while applying a function [33msame[0m-  of type [33mSame @Type @Type t0 t1 t2 => t0 -> t1 -> SProxy t2[0m-  to argument [33mRProxy[0m-while inferring the type of [33msame RProxy[0m+  of type [33mSame @Type @Type t0 t1 t2 => t0 -> t1 -> Proxy @Symbol t2[0m+  to argument [33mProxy[0m+while inferring the type of [33msame Proxy[0m in value declaration [33mexample[0m  where [33mt3[0m is a rigid type variable
tests/purs/failing/InstanceChainBothUnknownAndMatch.purs view
@@ -1,18 +1,16 @@ -- @shouldFailWith NoInstanceFound module InstanceChains.BothUnknownAndMatch where -import Type.Proxy (Proxy)-import Type.Row (RProxy(..))-import Data.Symbol (SProxy(..))+import Type.Proxy (Proxy(..))  class Same l r (o :: Symbol) | l r -> o instance sameY :: Same t t "Y" else instance sameN :: Same l r "N"-same :: forall l r o. Same l r o => l -> r -> SProxy o-same _ _ = SProxy+same :: forall l r o. Same l r o => l -> r -> Proxy o+same _ _ = Proxy  -- for label `u`, `t ~ Int` should be Unknown -- for label `m`, `Int ~ Int` should be a match -- together they should be Unknown-example :: forall t. Proxy t -> SProxy _-example _ = same (RProxy :: RProxy (u :: t, m :: Int))-                 (RProxy :: RProxy (u :: Int, m :: Int))+example :: forall t. Proxy t -> Proxy _+example _ = same (Proxy :: Proxy (u :: t, m :: Int))+                 (Proxy :: Proxy (u :: Int, m :: Int))
tests/purs/failing/InstanceChainSkolemUnknownMatch.out view
@@ -1,6 +1,6 @@ Error found: in module [33mInstanceChainSkolemUnknownMatch[0m-at tests/purs/failing/InstanceChainSkolemUnknownMatch.purs:14:13 - 14:36 (line 14, column 13 - line 14, column 36)+at tests/purs/failing/InstanceChainSkolemUnknownMatch.purs:13:13 - 13:36 (line 13, column 13 - line 13, column 36)    No type class instance was found for   [33m                                                  [0m@@ -8,9 +8,13 @@   [33m                                       (Proxy Int)[0m   [33m                                       t4         [0m   [33m                                                  [0m+  The following instance partially overlaps the above constraint, which means the rest of its instance chain will not be considered: +    [33mInstanceChainSkolemUnknownMatch.sameY[0m++ while applying a function [33msame[0m-  of type [33mSame @Type @Type t0 t1 t2 => t0 -> t1 -> SProxy t2[0m+  of type [33mSame @Type @Type t0 t1 t2 => t0 -> t1 -> Proxy @Symbol t2[0m   to argument [33mProxy[0m while inferring the type of [33msame Proxy[0m in value declaration [33mexample[0m
tests/purs/failing/InstanceChainSkolemUnknownMatch.purs view
@@ -2,14 +2,13 @@ module InstanceChainSkolemUnknownMatch where  import Type.Proxy (Proxy(..))-import Data.Symbol (SProxy(..))  class Same l r (o :: Symbol) | l r -> o instance sameY :: Same t t "Y" else instance sameN :: Same l r "N"-same :: forall l r o. Same l r o => l -> r -> SProxy o-same _ _ = SProxy+same :: forall l r o. Same l r o => l -> r -> Proxy o+same _ _ = Proxy  -- shouldn't discard sameY as Apart-example :: forall (t :: Type). Proxy t -> SProxy _+example :: forall (t :: Type). Proxy t -> Proxy _ example _ = same (Proxy :: Proxy t) (Proxy :: Proxy Int) 
+ tests/purs/failing/IntAsRecordLabel.out view
@@ -0,0 +1,10 @@+Error found:+at tests/purs/failing/IntAsRecordLabel.purs:4:27 - 4:29 (line 4, column 27 - line 4, column 29)++  Unable to parse module:+  Unexpected token '42'+++See https://github.com/purescript/documentation/blob/master/errors/ErrorParsingModule.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/IntAsRecordLabel.purs view
@@ -0,0 +1,4 @@+-- @shouldFailWith ErrorParsingModule+module Main where++type IntAsRecordLabel = { 42 :: Int }
+ tests/purs/failing/IntToString1.out view
@@ -0,0 +1,31 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/IntToString1.purs:14:15 - 14:46 (line 14, column 15 - line 14, column 46)++  Could not match type+  [33m     [0m+  [33m  "1"[0m+  [33m     [0m+  with type+  [33m     [0m+  [33m  "a"[0m+  [33m     [0m++while solving type class constraint+[33m                       [0m+[33m  Prim.Int.ToString 1  [0m+[33m                    "a"[0m+[33m                       [0m+while applying a function [33mtestToString[0m+  of type [33mToString t0 t1 => Proxy @Int t0 -> Proxy @Symbol t1[0m+  to argument [33mProxy[0m+while checking that expression [33mtestToString Proxy[0m+  has type [33mProxy @Symbol "a"[0m+in value declaration [33mposToString[0m++where [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/IntToString1.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prelude+import Prim.Int (class ToString)++data Proxy :: forall k. k -> Type+data Proxy a = Proxy++testToString :: forall i s. ToString i s => Proxy i -> Proxy s+testToString _ = Proxy++posToString :: Proxy "a"+posToString = testToString (Proxy :: Proxy 1)
+ tests/purs/failing/IntToString2.out view
@@ -0,0 +1,31 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/IntToString2.purs:14:15 - 14:49 (line 14, column 15 - line 14, column 49)++  Could not match type+  [33m      [0m+  [33m  "-1"[0m+  [33m      [0m+  with type+  [33m     [0m+  [33m  "a"[0m+  [33m     [0m++while solving type class constraint+[33m                       [0m+[33m  Prim.Int.ToString -1 [0m+[33m                    "a"[0m+[33m                       [0m+while applying a function [33mtestToString[0m+  of type [33mToString t0 t1 => Proxy @Int t0 -> Proxy @Symbol t1[0m+  to argument [33mProxy[0m+while checking that expression [33mtestToString Proxy[0m+  has type [33mProxy @Symbol "a"[0m+in value declaration [33mnegToString[0m++where [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/IntToString2.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prelude+import Prim.Int (class ToString)++data Proxy :: forall k. k -> Type+data Proxy a = Proxy++testToString :: forall i s. ToString i s => Proxy i -> Proxy s+testToString _ = Proxy++negToString :: Proxy "a"+negToString = testToString (Proxy :: Proxy (-1))
+ tests/purs/failing/IntToString3.out view
@@ -0,0 +1,31 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/IntToString3.purs:14:16 - 14:47 (line 14, column 16 - line 14, column 47)++  Could not match type+  [33m     [0m+  [33m  "0"[0m+  [33m     [0m+  with type+  [33m     [0m+  [33m  "a"[0m+  [33m     [0m++while solving type class constraint+[33m                       [0m+[33m  Prim.Int.ToString 0  [0m+[33m                    "a"[0m+[33m                       [0m+while applying a function [33mtestToString[0m+  of type [33mToString t0 t1 => Proxy @Int t0 -> Proxy @Symbol t1[0m+  to argument [33mProxy[0m+while checking that expression [33mtestToString Proxy[0m+  has type [33mProxy @Symbol "a"[0m+in value declaration [33mzeroToString[0m++where [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/TypesDoNotUnify.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/IntToString3.purs view
@@ -0,0 +1,14 @@+-- @shouldFailWith TypesDoNotUnify+module Main where++import Prelude+import Prim.Int (class ToString)++data Proxy :: forall k. k -> Type+data Proxy a = Proxy++testToString :: forall i s. ToString i s => Proxy i -> Proxy s+testToString _ = Proxy++zeroToString :: Proxy "a"+zeroToString = testToString (Proxy :: Proxy 0)
tests/purs/failing/LacksWithSubGoal.purs view
@@ -5,7 +5,7 @@  data S (r :: Symbol) = S -data R (r :: # Type) = R+data R (r :: Row Type) = R  union :: forall s r. Lacks s r => S s -> R r union S = R
tests/purs/failing/MissingFFIImplementations.js view
@@ -1,1 +1,1 @@-exports.yes = true;+export var yes = true;
+ tests/purs/failing/OperatorSections2.out view
@@ -0,0 +1,9 @@+Error found:+at tests/purs/failing/OperatorSections2.purs:6:10 - 6:11 (line 6, column 10 - line 6, column 11)++  An anonymous function argument appears in an invalid context.+++See https://github.com/purescript/documentation/blob/master/errors/IncorrectAnonymousArgument.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/OperatorSections2.purs view
@@ -0,0 +1,6 @@+-- @shouldFailWith IncorrectAnonymousArgument+module Main where++import Prelude++test = ( _ * 4 + 1 ) 50
tests/purs/failing/ProgrammableTypeErrors.out view
@@ -13,10 +13,10 @@ [33m                          [0m while applying a function [33mmyShow[0m   of type [33mMyShow t0 => t0 -> String[0m-  to argument [33m\$0 ->      [0m-              [33m  (add $0) 1[0m-while checking that expression [33mmyShow (\$0 ->      [0m-                               [33m          (add $0) 1[0m+  to argument [33m\$1 ->      [0m+              [33m  (add $1) 1[0m+while checking that expression [33mmyShow (\$1 ->      [0m+                               [33m          (add $1) 1[0m                                [33m       )            [0m   has type [33mString[0m in value declaration [33mmain[0m
tests/purs/failing/RowLacks.out view
@@ -1,6 +1,6 @@ Error found: in module [33mMain[0m-at tests/purs/failing/RowLacks.purs:16:9 - 16:68 (line 16, column 9 - line 16, column 68)+at tests/purs/failing/RowLacks.purs:16:9 - 16:66 (line 16, column 9 - line 16, column 66)    No type class instance was found for   [33m                              [0m@@ -12,13 +12,16 @@   [33m                              [0m  while applying a function [33mlacksX[0m-  of type [33mLacks @Type "x" t0 => RProxy t0 -> RProxy (() @Type)[0m-  to argument [33mRProxy[0m-while checking that expression [33mlacksX RProxy[0m-  has type [33mRProxy (() @Type)[0m+  of type [33mLacks @t1 "x" t2 => Proxy @(Row t1) t2 -> Proxy @(Row t3) (() @t3)[0m+  to argument [33mProxy[0m+while checking that expression [33mlacksX Proxy[0m+  has type [33mProxy @(Row t0) (() @t0)[0m in value declaration [33mtest1[0m  where [33mt0[0m is an unknown type+      [33mt1[0m is an unknown type+      [33mt3[0m is an unknown type+      [33mt2[0m is an unknown type  See https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md for more information, or to contribute content related to this error.
tests/purs/failing/RowLacks.purs view
@@ -3,16 +3,16 @@  import Effect.Console (log) import Prim.Row (class Lacks)-import Type.Row (RProxy(..))+import Type.Proxy (Proxy(..))  lacksX   :: forall r    . Lacks "x" r-  => RProxy r-  -> RProxy ()-lacksX _ = RProxy+  => Proxy r+  -> Proxy ()+lacksX _ = Proxy -test1 :: RProxy ()-test1 = lacksX (RProxy :: RProxy (x :: Int, y :: Int, z :: String))+test1 :: Proxy ()+test1 = lacksX (Proxy :: Proxy (x :: Int, y :: Int, z :: String))  main = log "Done"
tests/purs/failing/TransitiveKindExport.purs view
@@ -1,6 +1,6 @@ -- @shouldFailWith TransitiveExportError module Main (TestProxy(..)) where -foreign import kind Test+data Test  data TestProxy (p :: Test) = TestProxy
+ tests/purs/failing/TypedHole3.out view
@@ -0,0 +1,34 @@+Error found:+in module [33mMain[0m+at tests/purs/failing/TypedHole3.purs:4:10 - 4:15 (line 4, column 10 - line 4, column 15)++  Hole '[33mhelp[0m' has the inferred type+  [33m    [0m+  [33m  t0[0m+  [33m    [0m+  You could substitute the hole with one of these values:+  [33m                                                                                                        [0m+  [33m  Control.Alt.alt               :: forall f a. Alt f => f a -> f a -> f a                               [0m+  [33m  Control.Alternative.guard     :: forall m. Alternative m => Boolean -> m Unit                         [0m+  [33m  Control.Applicative.liftA1    :: forall f a b. Applicative f => (a -> b) -> f a -> f b                [0m+  [33m  Control.Applicative.pure      :: forall f a. Applicative f => a -> f a                                [0m+  [33m  Control.Applicative.unless    :: forall m. Applicative m => Boolean -> m Unit -> m Unit               [0m+  [33m  Control.Applicative.when      :: forall m. Applicative m => Boolean -> m Unit -> m Unit               [0m+  [33m  Control.Apply.apply           :: forall f a b. Apply f => f (a -> b) -> f a -> f b                    [0m+  [33m  Control.Apply.applyFirst      :: forall a b f. Apply f => f a -> f b -> f a                           [0m+  [33m  Control.Apply.applySecond     :: forall a b f. Apply f => f a -> f b -> f b                           [0m+  [33m  Control.Apply.lift2           :: forall a b c f. Apply f => (a -> b -> c) -> f a -> ... -> ...        [0m+  [33m  Control.Apply.lift3           :: forall a b c d f. Apply f => (a -> b -> ...) -> f a -> ... -> ...    [0m+  [33m  Control.Apply.lift4           :: forall a b c d e f. Apply f => (a -> b -> ...) -> f a -> ... -> ...  [0m+  [33m  Control.Apply.lift5           :: forall a b c d e f g. Apply f => (a -> b -> ...) -> f a -> ... -> ...[0m+  [33m  Control.Biapplicative.bipure  :: forall w a b. Biapplicative w => a -> b -> w a b                     [0m+  [33m  Control.Biapply.biapply       :: forall w a b c d. Biapply w => w (a -> b) (c -> d) -> w a c -> w b d [0m+  [33m                                                                                                        [0m++in value declaration [33mfn[0m++where [33mt0[0m is an unknown type++See https://github.com/purescript/documentation/blob/master/errors/HoleInferredType.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/TypedHole3.purs view
@@ -0,0 +1,4 @@+-- @shouldFailWith HoleInferredType+module Main where++fn _ _ = ?help
+ tests/purs/failing/UnsupportedFFICommonJSExports1.js view
@@ -0,0 +1,2 @@+export var yes = true;+exports.no = false;
+ tests/purs/failing/UnsupportedFFICommonJSExports1.out view
@@ -0,0 +1,12 @@+Error found:+at tests/purs/failing/UnsupportedFFICommonJSExports1.purs:2:1 - 5:29 (line 2, column 1 - line 5, column 29)++  The following CommonJS exports are not supported in the ES foreign module for module [33mMain[0m:++    no++++See https://github.com/purescript/documentation/blob/master/errors/UnsupportedFFICommonJSExports.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/UnsupportedFFICommonJSExports1.purs view
@@ -0,0 +1,5 @@+-- @shouldFailWith UnsupportedFFICommonJSExports+module Main where++foreign import yes :: Boolean+foreign import no :: Boolean
+ tests/purs/failing/UnsupportedFFICommonJSExports2.js view
@@ -0,0 +1,4 @@+import { yes, no } from "some ES module";++exports.yes = yes;+exports.no = no;
+ tests/purs/failing/UnsupportedFFICommonJSExports2.out view
@@ -0,0 +1,13 @@+Error found:+at tests/purs/failing/UnsupportedFFICommonJSExports2.purs:2:1 - 5:29 (line 2, column 1 - line 5, column 29)++  The following CommonJS exports are not supported in the ES foreign module for module [33mMain[0m:++    yes+    no++++See https://github.com/purescript/documentation/blob/master/errors/UnsupportedFFICommonJSExports.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/UnsupportedFFICommonJSExports2.purs view
@@ -0,0 +1,5 @@+-- @shouldFailWith UnsupportedFFICommonJSExports+module Main where++foreign import yes :: Boolean+foreign import no :: Boolean
+ tests/purs/failing/UnsupportedFFICommonJSImports1.js view
@@ -0,0 +1,4 @@+var cjsImports = require("some CJS module");++export var yes = cjsImports.yes;+export var no = cjsImports.no;
+ tests/purs/failing/UnsupportedFFICommonJSImports1.out view
@@ -0,0 +1,12 @@+Error found:+at tests/purs/failing/UnsupportedFFICommonJSImports1.purs:2:1 - 5:29 (line 2, column 1 - line 5, column 29)++  The following CommonJS imports are not supported in the ES foreign module for module [33mMain[0m:++    some CJS module++++See https://github.com/purescript/documentation/blob/master/errors/UnsupportedFFICommonJSImports.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/UnsupportedFFICommonJSImports1.purs view
@@ -0,0 +1,5 @@+-- @shouldFailWith UnsupportedFFICommonJSImports+module Main where++foreign import yes :: Boolean+foreign import no :: Boolean
+ tests/purs/failing/UnsupportedFFICommonJSImports2.js view
@@ -0,0 +1,5 @@+import { yes } from "some ES module";+var cjsImports = require("some CJS module");++exports.yes = yes;+exports.no = cjsImports.no;
+ tests/purs/failing/UnsupportedFFICommonJSImports2.out view
@@ -0,0 +1,12 @@+Error found:+at tests/purs/failing/UnsupportedFFICommonJSImports2.purs:2:1 - 5:29 (line 2, column 1 - line 5, column 29)++  The following CommonJS imports are not supported in the ES foreign module for module [33mMain[0m:++    some CJS module++++See https://github.com/purescript/documentation/blob/master/errors/UnsupportedFFICommonJSImports.md for more information,+or to contribute content related to this error.+
+ tests/purs/failing/UnsupportedFFICommonJSImports2.purs view
@@ -0,0 +1,5 @@+-- @shouldFailWith UnsupportedFFICommonJSImports+module Main where++foreign import yes :: Boolean+foreign import no :: Boolean
+ tests/purs/layout/IntType.out view
@@ -0,0 +1,8 @@+module Test where{++type IntType = (-1);++type IntType' = (-+  -- here's a comment+  1)}+<eof>
+ tests/purs/layout/IntType.purs view
@@ -0,0 +1,7 @@+module Test where++type IntType = (-1)++type IntType' = (-+  -- here's a comment+  1)
tests/purs/optimize/2866.out.js view
@@ -1,15 +1,13 @@- // Canonical test for #2866. This doesn't need to test whether `apply`s // defined from modules other than `Data.Function` are incorrectly // optimized since the rest of the test suite seemingly catches it.-"use strict"; var Area = function (x) {     return x; }; var areaFlipped = 42; var area = 42;-module.exports = {-    Area: Area,-    area: area,-    areaFlipped: areaFlipped+export {+    Area,+    area,+    areaFlipped };
+ tests/purs/optimize/4179.out.js view
@@ -0,0 +1,101 @@+var $runtime_lazy = function (name, moduleName, init) {+    var state = 0;+    var val;+    return function (lineNumber) {+        if (state === 2) return val;+        if (state === 1) throw new ReferenceError(name + " was needed before it finished initializing (module " + moduleName + ", line " + lineNumber + ")", moduleName, lineNumber);+        state = 1;+        val = init();+        state = 2;+        return val;+    };+};++// This is a test that TCO isn't broken by unsafePartial.+var tcoable = function ($copy_v) {+    var $tco_done = false;+    var $tco_result;+    function $tco_loop(v) {+        if (v === 0) {+            $tco_done = true;+            return "done";+        };+        if (v > 0) {+            $copy_v = v - 1 | 0;+            return;+        };+        throw new Error("Failed pattern match at Main (line 43, column 25 - line 45, column 31): " + [ v.constructor.name ]);+    };+    while (!$tco_done) {+        $tco_result = $tco_loop($copy_v);+    };+    return $tco_result;+};+var isOdd = function (n) {+    return n > 0 && !isEven(n - 1 | 0);+};+var isEven = function (n) {+    return n === 0 || isOdd(n - 1 | 0);+};++// This is an example of four mutually recursive bindings with a complex+// run-time dependency structure. The expected result is:+//   alpha is defined without any laziness+//   bravo and charlie are lazily initialized in a group+//   and then delta is lazily initialized+var alpha = function (v) {+    if (v === 0) {+        return $lazy_bravo(18);+    };+    if (v === 1) {+        return $lazy_charlie(19);+    };+    if (v === 2) {+        return function (y) {+            var $7 = y > 0;+            if ($7) {+                return bravo(y);+            };+            return charlie(y);+        };+    };+    return function (y) {+        return $lazy_delta(21)(y)(v);+    };+};+var $lazy_charlie = /* #__PURE__ */ $runtime_lazy("charlie", "Main", function () {+    return (function (v) {+        return alpha;+    })({})(4);+});+var $lazy_bravo = /* #__PURE__ */ $runtime_lazy("bravo", "Main", function () {+    return (function (v) {+        return alpha;+    })({})(3);+});+var charlie = /* #__PURE__ */ $lazy_charlie(31);+var bravo = /* #__PURE__ */ $lazy_bravo(28);+var $lazy_delta = /* #__PURE__ */ $runtime_lazy("delta", "Main", function () {+    var b = (function (v) {+        return bravo;+    })({});+    return function (x) {+        return function (y) {+            var $8 = x === y;+            if ($8) {+                return b(0);+            };+            return 1.0;+        };+    };+});+var delta = /* #__PURE__ */ $lazy_delta(34);+export {+    isEven,+    isOdd,+    alpha,+    bravo,+    charlie,+    delta,+    tcoable+};
+ tests/purs/optimize/4179.purs view
@@ -0,0 +1,45 @@+module Main where++import Prelude++import Partial.Unsafe (unsafePartial)++isEven n = n == 0 || isOdd (n - 1)+isOdd n = n > 0 && not (isEven (n - 1))++-- This is an example of four mutually recursive bindings with a complex+-- run-time dependency structure. The expected result is:+--   alpha is defined without any laziness+--   bravo and charlie are lazily initialized in a group+--   and then delta is lazily initialized++alpha :: Int -> Int -> Number+alpha = case _ of+  0 -> bravo+  1 -> charlie+  2 -> \y -> if y > 0 then bravo y else charlie y+  x -> \y -> delta y x++-- Me: `alpha`+-- purs: The value of alpha is undefined here, so this reference is not allowed.+-- Me: `(\_ -> alpha) {}`+-- purs: LGTM!++bravo :: Int -> Number+bravo = (\_ -> alpha) {} 3++charlie :: Int -> Number+charlie = (\_ -> alpha) {} 4++delta :: Int -> Int -> Number+delta =+  let b = (\_ -> bravo) {}+  in \x y -> if x == y then b 0 else 1.0+++-- This is a test that TCO isn't broken by unsafePartial.++tcoable :: Int -> String+tcoable = unsafePartial case _ of+  0 -> "done"+  n | n > 0 -> tcoable (n - 1)
tests/purs/passing/3114.purs view
@@ -9,17 +9,18 @@ import Effect.Console (log) import VendoredVariant import Data.Symbol+import Type.Proxy (Proxy(..))  type TestVariants =-  ( foo :: FProxy Maybe-  , bar :: FProxy (Tuple String)+  ( foo :: Proxy Maybe+  , bar :: Proxy (Tuple String)   ) -_foo :: SProxy "foo"-_foo = SProxy+_foo :: Proxy "foo"+_foo = Proxy -_bar :: SProxy "bar"-_bar = SProxy+_bar :: Proxy "bar"+_bar = Proxy  main :: Effect Unit main = do
tests/purs/passing/3114/VendoredVariant.purs view
@@ -7,9 +7,9 @@ import Unsafe.Coerce (unsafeCoerce) import Partial.Unsafe (unsafeCrashWith) import Data.Symbol+import Type.Proxy (Proxy(..)) -data FProxy (k :: Type -> Type) = FProxy-data VariantF (f :: # Type) a+data VariantF (f :: Row Type) a  newtype VariantFRep f a = VariantFRep   { type :: String@@ -23,9 +23,9 @@  on   :: forall sym f a b r1 r2-  . Row.Cons sym (FProxy f) r1 r2+  . Row.Cons sym (Proxy f) r1 r2   => IsSymbol sym-  => SProxy sym+  => Proxy sym   -> (f a -> b)   -> (VariantF r1 a -> b)   -> VariantF r2 a
+ tests/purs/passing/3329.purs view
@@ -0,0 +1,34 @@+module Main where++import Prelude++import Data.Either (Either(..))+import Data.Maybe (Maybe(..))+import Effect (Effect)+import Effect.Console (log)++class Inject f g where+  inj :: f -> g+  prj :: g -> Maybe f++instance injectRefl :: Inject x x where+  inj x = x+  prj x = Just x+else instance injectLeft :: Inject l (Either l r) where+  inj x = Left x+  prj (Left x) = Just x+  prj _ = Nothing+else instance injectRight :: Inject x r => Inject x (Either l r) where+  inj x = Right (inj x)+  prj (Right x) = prj x+  prj _ = Nothing++injL :: forall f g. f -> Either f g+injL = inj++main :: Effect Unit+main = log "Done"+  where+  testInjLWithUnknowns a = case inj a of+    Left a' -> a'+    Right _ -> a
tests/purs/passing/3558-UpToDateDictsForHigherOrderFns.purs view
@@ -4,12 +4,13 @@ import Effect (Effect) import Effect.Console (log) import Record.Unsafe (unsafeGet)-import Type.Data.Symbol (class IsSymbol, SProxy, reflectSymbol)+import Type.Data.Symbol (class IsSymbol, reflectSymbol) import Type.Row (class Cons) as Row+import Type.Proxy (Proxy) -newtype LBox row a = LBox (∀ r. (∀ lbl _1. Row.Cons lbl a _1 row ⇒ IsSymbol lbl ⇒ SProxy lbl → r) → r)+newtype LBox row a = LBox (∀ r. (∀ lbl _1. Row.Cons lbl a _1 row ⇒ IsSymbol lbl ⇒ Proxy lbl → r) → r) -unLBox ∷ ∀ row a r. (∀ lbl _1. Row.Cons lbl a _1 row ⇒ IsSymbol lbl ⇒ SProxy lbl → r) → LBox row a → r+unLBox ∷ ∀ row a r. (∀ lbl _1. Row.Cons lbl a _1 row ⇒ IsSymbol lbl ⇒ Proxy lbl → r) → LBox row a → r unLBox g (LBox f) = f g  -- Example 1@@ -24,7 +25,7 @@   :: forall r r' l a    . IsSymbol l   => Row.Cons l a r' r-  => SProxy l+  => Proxy l   -> Record r   -> a get l r = unsafeGet (reflectSymbol l) r
+ tests/purs/passing/3941.purs view
@@ -0,0 +1,25 @@+module Main where++import Effect.Console (log)+import Unsafe.Coerce (unsafeCoerce)++class TwoParams a b where+  func :: a -> b++instance equals :: TwoParams a a where+  func a = a+else+instance any :: TwoParams a b where+  func = unsafeCoerce++testEquals :: forall a. a -> a+testEquals = func -- with instance `equals`+testAny :: Int -> Boolean+testAny = func -- with instance `any`++-- `a` and `m a` are never unifiable unless we have infinite types (and of course not)+-- so expected that the instance `any` is chosen.+thisShouldBeCompiled :: forall m a. a -> m a+thisShouldBeCompiled = func++main = log "Done"
+ tests/purs/passing/4179.js view
@@ -0,0 +1,2 @@+export const runtimeImportImpl = nothing => just => moduleName => body => () =>+  import(`../${moduleName}/index.js`).then(() => body(nothing)(), err => body(just(err.toString()))());
+ tests/purs/passing/4179.purs view
@@ -0,0 +1,73 @@+module Main where++import Prelude++import Data.Maybe (Maybe(..))+import Effect (Effect)+import Effect.Console (log)+import Test.Assert (assertEqual)+import CustomAssert (assertThrows)++force :: forall a b. (Unit -> b) -> b+force f = f unit++alpha = { backref: \_ -> bravo, x: 1 }+bravo = force \_ -> alpha.x+++complicatedIdentity :: forall a. a -> a+complicatedIdentity = h+  where+  -- This highly contrived function tests that escalating force is caught and+  -- doesn't cause an infinite loop during compilation. ("Escalating force"+  -- means that invoking `f` with two argument leads to `f` being invoked with+  -- three arguments, and so on.)++  -- If the escalating loop in `f` isn't taken into account, `h` might be+  -- initialized before `g`, which will lead to a run-time error. The intended+  -- behavior is to lazily initialize `g` and `h` together, and let the fact+  -- that at run time `g` never actually dereferences `h` resolve the+  -- initialization ordering.++  f :: forall a. Int -> { tick :: a -> a, tock :: a -> a }+  f n = { tick: if n <= 0 then identity else (f (n - 1)).tock identity, tock: \a -> g n a }++  g :: forall a. Int -> a -> a+  g = (\bit -> if bit then \n -> (f n).tick else const h) true++  h :: forall a. a -> a+  h = (\n -> (f n).tick) 10+++foreign import runtimeImportImpl :: forall a. Maybe String -> (String -> Maybe String) -> String -> (Maybe String -> Effect a) -> Effect a++runtimeImport :: forall a. String -> (Maybe String -> Effect a) -> Effect a+runtimeImport = runtimeImportImpl Nothing Just++type ID = forall a. a -> a++main = do+  err <- assertThrows \_ ->+    let+      selfOwn = { a: 1, b: force \_ -> selfOwn.a }+    in selfOwn+  assertEqual { actual: err, expected: "ReferenceError: selfOwn was needed before it finished initializing (module Main, line 52)" }++  err2 <- assertThrows \_ ->+    let+      f = (\_ -> { left: g identity, right: h identity }) unit++      g :: ID -> ID+      g x = (j x x x).right++      h :: ID -> ID -> { left :: ID, right :: ID }+      h x = j x x++      j x y z = { left: x y z, right: f.left }+    in f+  assertEqual { actual: err2, expected: "ReferenceError: f was needed before it finished initializing (module Main, line 66)" }++  assertEqual { actual: bravo, expected: 1 }+  runtimeImport "InitializationError" \err3 -> do+    assertEqual { actual: err3, expected: Just "ReferenceError: alphaArray was needed before it finished initializing (module InitializationError, line 0)" } -- TODO: fix the 0+    log "Done"
+ tests/purs/passing/4179/CustomAssert.js view
@@ -0,0 +1,12 @@+export var assertThrowsImpl = function (arg) {+  return function (f) {+    return function () {+      try {+        f(arg);+      } catch (e) {+        return e.toString();+      }+      throw new Error("Assertion failed: An error should have been thrown");+    };+  };+};
+ tests/purs/passing/4179/CustomAssert.purs view
@@ -0,0 +1,10 @@+module CustomAssert (assertThrows) where++import Prelude++import Effect (Effect)++assertThrows :: forall a. (Unit -> a) -> Effect String+assertThrows = assertThrowsImpl unit++foreign import assertThrowsImpl :: forall a b. a -> (a -> b) -> Effect String
+ tests/purs/passing/4179/InitializationError.purs view
@@ -0,0 +1,14 @@+module InitializationError where++class Alpha a where+  alpha :: a Int -> a Int+class Alpha a <= Bravo a+class Bravo a <= Charlie a++charlieAlpha :: forall a. Charlie a => a Int -> a Int+charlieAlpha = alpha++instance alphaArray :: Alpha Array where+  alpha = charlieAlpha+instance Bravo Array+instance Charlie Array
tests/purs/passing/AppendInReverse.purs view
@@ -1,9 +1,9 @@ module Main where  import Prelude-import Data.Symbol (SProxy(..)) import Prim.Symbol (class Append) import Effect.Console (log)+import Type.Proxy (Proxy(..))  class Balanced (sym :: Symbol) @@ -15,20 +15,20 @@      , Balanced sym2      ) => Balanced sym -balanced :: forall sym. Balanced sym => SProxy sym -> String+balanced :: forall sym. Balanced sym => Proxy sym -> String balanced _ = "ok"  b0 :: String-b0 = balanced (SProxy :: SProxy "")+b0 = balanced (Proxy :: Proxy "")  b1 :: String-b1 = balanced (SProxy :: SProxy "()")+b1 = balanced (Proxy :: Proxy "()")  b2 :: String-b2 = balanced (SProxy :: SProxy "(())")+b2 = balanced (Proxy :: Proxy "(())")  b3 :: String-b3 = balanced (SProxy :: SProxy "((()))")+b3 = balanced (Proxy :: Proxy "((()))")  main = do   log b0
tests/purs/passing/DuplicateProperties.purs view
@@ -2,25 +2,22 @@  import Prelude import Effect.Console (log)--data RProxy (r :: # Type) = RProxy--data Proxy (a :: Type) = Proxy+import Type.Proxy (Proxy(..)) -subtractX :: forall r a. RProxy (x :: a | r) -> RProxy r-subtractX RProxy = RProxy+subtractX :: forall r a. Proxy (x :: a | r) -> Proxy r+subtractX Proxy = Proxy -extractX :: forall r a. RProxy (x :: a | r) -> Proxy a-extractX RProxy = Proxy+extractX :: forall r a. Proxy (x :: a | r) -> Proxy a+extractX Proxy = Proxy -hasX :: forall r a b. RProxy (x :: a, y :: b | r)-hasX = RProxy+hasX :: forall r a b. Proxy (x :: a, y :: b | r)+hasX = Proxy  test1 = subtractX (subtractX hasX)  test2   :: forall r a b-   . RProxy (x :: a, x :: b, x :: Int | r)+   . Proxy (x :: a, x :: b, x :: Int | r)   -> Proxy Int test2 x = extractX (subtractX (subtractX x)) 
+ tests/purs/passing/ESFFIFunctionConst.js view
@@ -0,0 +1,3 @@+export const functionName = function (a) {+  return a;+}
+ tests/purs/passing/ESFFIFunctionConst.purs view
@@ -0,0 +1,8 @@+module Main where++import Prelude+import Effect.Console (log)++foreign import functionName :: forall a. a -> a++main = log "Done"
+ tests/purs/passing/ESFFIFunctionFunction.js view
@@ -0,0 +1,3 @@+export function functionName(a) {+  return a;+}
+ tests/purs/passing/ESFFIFunctionFunction.purs view
@@ -0,0 +1,8 @@+module Main where++import Prelude+import Effect.Console (log)++foreign import functionName :: forall a. a -> a++main = log "Done"
+ tests/purs/passing/ESFFIFunctionVar.js view
@@ -0,0 +1,3 @@+export var functionName = function (a) {+  return a;+}
+ tests/purs/passing/ESFFIFunctionVar.purs view
@@ -0,0 +1,8 @@+module Main where++import Prelude+import Effect.Console (log)++foreign import functionName :: forall a. a -> a++main = log "Done"
+ tests/purs/passing/ESFFIValueConst1.js view
@@ -0,0 +1,1 @@+export const value = 1;
+ tests/purs/passing/ESFFIValueConst1.purs view
@@ -0,0 +1,8 @@+module Main where++import Prelude+import Effect.Console (log)++foreign import value :: Int++main = log "Done"
+ tests/purs/passing/ESFFIValueVar.js view
@@ -0,0 +1,1 @@+export var value = 1;
+ tests/purs/passing/ESFFIValueVar.purs view
@@ -0,0 +1,8 @@+module Main where++import Prelude+import Effect.Console (log)++foreign import value :: Int++main = log "Done"
tests/purs/passing/EffFn.js view
@@ -1,1 +1,1 @@-exports.add3 = function (a,b,c) { return a + b + c; };+export var add3 = function (a,b,c) { return a + b + c; };
+ tests/purs/passing/FFIConstraintWorkaround.js view
@@ -0,0 +1,5 @@+export function showImpl(showFn) {+  return function (val) {+    return showFn(val);+  };+};
+ tests/purs/passing/FFIConstraintWorkaround.purs view
@@ -0,0 +1,22 @@+module Main where++import Prelude+import Effect+import Effect.Console+import Test.Assert++main :: Effect Unit+main = do+  assert' "Showing Int is correct" $ showFFI 4 == "4"+  assert' "Showing String is correct" $ showFFI "string" == "\"string\""+  assert' "Showing Record is correct" $+    showFFI { a: 1, b: true, c: 'd', e: 4.0 } == "{ a: 1, b: true, c: 'd', e: 4.0 }"+  log "Done"++showFFI :: forall a. Show a => a -> String+showFFI = showImpl show++-- Since type class constraints are not allowed+-- in FFI declarations, we have to pass members+-- we want to use into the function itself.+foreign import showImpl :: forall a. (a -> String) -> a -> String
+ tests/purs/passing/FFIDefaultESExport.js view
@@ -0,0 +1,3 @@+var message = "Done";++export { message as default };
+ tests/purs/passing/FFIDefaultESExport.purs view
@@ -0,0 +1,7 @@+module Main where++import Effect.Console (log)++foreign import default :: String++main = log default
tests/purs/passing/ForeignKind.purs view
@@ -1,7 +1,7 @@ module Main where  import Prelude-import ForeignKinds.Lib (kind Nat, Zero, Succ, N3, NatProxy, class AddNat, addNat, proxy1, proxy2)+import ForeignKinds.Lib (Nat, Zero, Succ, N3, NatProxy, class AddNat, addNat, proxy1, proxy2) import Effect.Console (log)  proxy1Add2Is3 :: NatProxy N3
tests/purs/passing/ForeignKind/Lib.purs view
@@ -1,8 +1,8 @@-module ForeignKinds.Lib (kind Nat, Kinded, Zero, Succ, N0, N1, N2, N3, NatProxy(..), class AddNat, addNat, proxy1, proxy2) where+module ForeignKinds.Lib (Nat, Kinded, Zero, Succ, N0, N1, N2, N3, NatProxy(..), class AddNat, addNat, proxy1, proxy2) where  -- declaration -foreign import kind Nat+data Nat  -- use in foreign data 
tests/purs/passing/FunWithFunDeps.js view
@@ -1,32 +1,28 @@  //: forall e. FVect Z e-exports.fnil = [];+export var fnil = [];  //: forall n e. e -> FVect n e -> FVect (S n) e-exports.fcons = function (hd) {+export var fcons = function (hd) {   return function (tl) {     return [hd].concat(tl);   }; }; -exports.fappend = function (dict) {-  return function (left) {-    return function (right) {-      return left.concat(right);-    };+export var fappendImpl = function (left) {+  return function (right) {+    return left.concat(right);   }; }; -exports.fflatten = function (dict) {-  return function (v) {-    var accRef = [];-    for (var indexRef = 0; indexRef < v.length; indexRef += 1) {-      accRef = accRef.concat(v[indexRef]);-    }-    return accRef;-  };+export var fflattenImpl = function (v) {+  var accRef = [];+  for (var indexRef = 0; indexRef < v.length; indexRef += 1) {+    accRef = accRef.concat(v[indexRef]);+  }+  return accRef; }; -exports.ftoArray = function (vect) {+export var ftoArray = function (vect) {   return vect; };
tests/purs/passing/FunWithFunDeps.purs view
@@ -26,8 +26,12 @@ foreign import data FVect :: Type -> Type -> Type foreign import fnil :: forall e. FVect Z e foreign import fcons :: forall n e. e -> FVect n e -> FVect (S n) e-foreign import fappend :: forall l r o e. NatPlus l r o => FVect l e -> FVect r e -> FVect o e-foreign import fflatten :: forall f s t o. NatMult f s o => FVect f (FVect s t) -> FVect o t+fappend :: forall l r o e. NatPlus l r o => FVect l e -> FVect r e -> FVect o e+fappend = fappendImpl+foreign import fappendImpl :: forall l r o e. FVect l e -> FVect r e -> FVect o e+fflatten :: forall f s t o. NatMult f s o => FVect f (FVect s t) -> FVect o t+fflatten = fflattenImpl+foreign import fflattenImpl :: forall f s t o. FVect f (FVect s t) -> FVect o t foreign import ftoArray :: forall n e. FVect n e -> Array e  -- should be able to figure these out
+ tests/purs/passing/IntToString.purs view
@@ -0,0 +1,71 @@+module Main where++import Prelude+import Effect.Console (log)+import Prim.Int (class Add, class Mul, class ToString)++data Proxy :: forall k. k -> Type+data Proxy a = Proxy++type One = 1+type NegOne = (-1)+type Zero = 0++testToString :: forall i s. ToString i s => Proxy i -> Proxy s+testToString _ = Proxy++posToString :: Proxy "1"+posToString = testToString (Proxy :: Proxy 1)++negToString :: Proxy "-1"+negToString = testToString (Proxy :: Proxy (-1))++zeroToString :: Proxy "0"+zeroToString = testToString (Proxy :: Proxy 0)++posToStringTA :: Proxy "1"+posToStringTA = testToString (Proxy :: Proxy One)++negToStringTA :: Proxy "-1"+negToStringTA = testToString (Proxy :: Proxy NegOne)++zeroToStringTA :: Proxy "0"+zeroToStringTA = testToString (Proxy :: Proxy Zero)++intAdd+  :: forall i1 i2 i3+   . Add i1 i2 i3+  => Proxy i1+  -> Proxy i2+  -> Proxy i3+intAdd _ _ = Proxy++intMul+  :: forall i1 i2 i3+   . Mul i1 i2 i3+  => Proxy i1+  -> Proxy i2+  -> Proxy i3+intMul _ _ = Proxy++testAdd :: Proxy "4"+testAdd = testToString (intAdd (Proxy :: _ 1) (Proxy :: _ 3))++testMul :: Proxy "6"+testMul = testToString (intMul (Proxy :: _ 2) (Proxy :: _ 3))++testMulAdd :: Proxy "10"+testMulAdd = testToString (intAdd (Proxy :: _ 4) (intMul (Proxy :: _ 2) (Proxy :: _ 3)))++testAddMul :: Proxy "20"+testAddMul = testToString (intMul (Proxy :: _ 4) (intAdd (Proxy :: _ 2) (Proxy :: _ 3)))++_maxInt = Proxy :: _ 2147483647++testMax :: Proxy "2147483647"+testMax = testToString _maxInt++testBeyondMax :: Proxy "4294967294"+testBeyondMax = testToString (intMul _maxInt (Proxy :: _ 2))++main = log "Done"
tests/purs/passing/OperatorSections.purs view
@@ -15,4 +15,6 @@   let div x y = x.x / y.x   assert $ (_ `div` foo { x = 4.0 }) { x: 4.0 } == 1.0   assert $ (foo { x = 4.0 } `div` _) { x: 4.0 } == 1.0+  assert $ (_ + 2 * 3) 1 == 7+  assert $ (3 * 2 + _) 1 == 7   log "Done"
+ tests/purs/passing/ParseTypeInt.purs view
@@ -0,0 +1,28 @@+module Main where++import Effect.Console (log)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++a :: Proxy 42+a = Proxy++b :: Proxy (-42)+b = Proxy++c :: Proxy (42 :: Int)+c = Proxy++d :: Proxy ((42) :: Int)+d = Proxy++e :: Proxy ((-42) :: Int)+e = Proxy++f :: Proxy (-+  -- here's a comment+  1)+f = Proxy++main = log "Done"
tests/purs/passing/PolyLabels.js view
@@ -1,12 +1,10 @@-"use strict";--exports.unsafeGet = function (s) {+export var unsafeGet = function (s) {   return function (o) {     return o[s];   }; }; -exports.unsafeSet = function(s) {+export var unsafeSet = function (s) {   return function(a) {     return function (o) {       var o1 = {};
tests/purs/passing/PolyLabels.purs view
@@ -4,7 +4,8 @@ import Prim.Row import Effect import Effect.Console-import Data.Symbol (class IsSymbol, SProxy(..), reflectSymbol)+import Data.Symbol (class IsSymbol, reflectSymbol)+import Type.Proxy (Proxy(..))  foreign import unsafeGet   :: forall r a@@ -23,7 +24,7 @@   :: forall r r' l a    . IsSymbol l   => Cons l a r' r-  => SProxy l+  => Proxy l   -> Record r   -> a get l = unsafeGet (reflectSymbol l)@@ -33,7 +34,7 @@    . IsSymbol l   => Cons l a r r1   => Cons l b r r2-  => SProxy l+  => Proxy l   -> b   -> Record r1   -> Record r2@@ -45,20 +46,20 @@   => Cons l a r r1   => Cons l b r r2   => Functor f-  => SProxy l+  => Proxy l   -> (a -> f b)   -> Record r1   -> f (Record r2) lens l f r = flip (set l) r <$> f (get l r)  getFoo :: forall a r. { foo :: a | r } -> a-getFoo = get (SProxy :: SProxy "foo")+getFoo = get (Proxy :: Proxy "foo")  setFoo :: forall a b r. b -> { foo :: a | r } -> { foo :: b | r }-setFoo = set (SProxy :: SProxy "foo")+setFoo = set (Proxy :: Proxy "foo")  fooLens :: forall f a b r. Functor f => (a -> f b) -> { foo :: a | r } -> f { foo :: b | r } -fooLens = lens (SProxy :: SProxy "foo")+fooLens = lens (Proxy :: Proxy "foo")  main :: Effect Unit main = do
tests/purs/passing/ReExportsExported.js view
@@ -1,4 +1,2 @@-"use strict";- // Import `A.a` which was re-exported from `B` and then again from `C`-exports.a = require('../C').a;+export { a } from '../C/index.js';
tests/purs/passing/RowLacks.purs view
@@ -2,34 +2,32 @@  import Effect.Console (log) import Prim.Row (class Lacks)-import Type.Row (RProxy(..))--data SProxy (a :: Symbol) = SProxy+import Type.Proxy (Proxy(..))  lacksX   :: forall r    . Lacks "x" r-  => RProxy r-  -> RProxy ()-lacksX _ = RProxy+  => Proxy r+  -> Proxy ()+lacksX _ = Proxy  lacksSym   :: forall sym (to :: Row Type)    . Lacks sym to-  => SProxy sym-  -> RProxy to-lacksSym _ = RProxy+  => Proxy sym+  -> Proxy to+lacksSym _ = Proxy -test1 :: RProxy ()-test1 = lacksX (RProxy :: RProxy (y :: Int, z :: String))+test1 :: Proxy ()+test1 = lacksX (Proxy :: Proxy (y :: Int, z :: String)) -test2 :: forall r. Lacks "x" r => RProxy r -> RProxy ()-test2 _ = lacksX (RProxy :: RProxy (y :: Int, z :: String | r))+test2 :: forall r. Lacks "x" r => Proxy r -> Proxy ()+test2 _ = lacksX (Proxy :: Proxy (y :: Int, z :: String | r)) -test3 :: RProxy ()-test3 = test2 (RProxy :: RProxy (a :: String))+test3 :: Proxy ()+test3 = test2 (Proxy :: Proxy (a :: String)) -test4 :: forall sym. SProxy sym -> RProxy ()+test4 :: forall sym. Proxy sym -> Proxy () test4 = lacksSym  main = log "Done"
tests/purs/passing/RowNub.purs view
@@ -2,22 +2,22 @@  import Effect.Console (log) import Prim.Row (class Nub, class Union)-import Type.Row (RProxy(..))+import Type.Proxy (Proxy(..))  nubUnion   :: forall r1 r2 r3 r4    . Union r1 r2 r3   => Nub r3 r4-  => RProxy r1-  -> RProxy r2-  -> RProxy r4-nubUnion _ _ = RProxy+  => Proxy r1+  -> Proxy r2+  -> Proxy r4+nubUnion _ _ = Proxy  type InL = (x :: Int, y :: String) type InR = (x :: String, y :: Int, z :: Boolean) type Out = (x :: Int, y :: String, z :: Boolean) -test :: RProxy Out-test = nubUnion (RProxy :: RProxy InL) (RProxy :: RProxy InR)+test :: Proxy Out+test = nubUnion (Proxy :: Proxy InL) (Proxy :: Proxy InR)  main = log "Done"
tests/purs/passing/RowUnion.js view
@@ -1,10 +1,6 @@-"use strict";--exports.merge = function (dict) {-  return function (l) {-    return function (r) {-      var o = {};-      return Object.assign(o, r, l);-    };+export var mergeImpl = function (l) {+  return function (r) {+    var o = {};+    return Object.assign(o, r, l);   }; };
tests/purs/passing/RowUnion.purs view
@@ -19,13 +19,20 @@ solveUnionBackwardsDblCons :: Proxy _ solveUnionBackwardsDblCons = solve (Proxy :: Proxy ( a :: Int, a :: String )) (Proxy :: Proxy ( a :: Boolean, a :: Int, a :: String )) -foreign import merge+merge   :: forall r1 r2 r3    . Union r1 r2 r3   => Record r1   -> Record r2   -> Record r3+merge = mergeImpl +foreign import mergeImpl+  :: forall r1 r2 r3+   . Record r1+  -> Record r2+  -> Record r3+ test1 = merge { x: 1 } { y: true }  test2 = merge { x: 1 } { x: true }@@ -62,7 +69,7 @@ test4 = withDefaults { x: 1, y: 2 }  -- r is a subrow of s if Union r t s for some t.-class Subrow (r :: # Type) (s :: # Type)+class Subrow (r :: Row Type) (s :: Row Type) instance subrow :: Union r t s => Subrow r s  main :: Effect Unit
+ tests/purs/passing/SolvingAddInt.purs view
@@ -0,0 +1,26 @@+module Main where++import Effect.Console (log)+import Prim.Int (class Add)++data Proxy k = Proxy++a :: forall n. Add 21 21 n => Proxy n+a = Proxy++a' :: Proxy 42+a' = a++b :: forall n. Add 21 n 42 => Proxy n+b = Proxy++b' :: Proxy 21+b' = b++c :: forall n. Add n 21 42 => Proxy n+c = Proxy++c' :: Proxy 21+c' = c++main = log "Done"
+ tests/purs/passing/SolvingCompareInt.purs view
@@ -0,0 +1,106 @@+module Main where++import Effect.Console (log)+import Prim.Int (class Compare)+import Prim.Ordering (EQ, GT, LT)++data Proxy :: forall k. k -> Type+data Proxy n = Proxy++assertLesser :: forall l r. Compare l r LT => Proxy ( left :: l, right :: r )+assertLesser = Proxy++assertGreater :: forall l r. Compare l r GT => Proxy ( left :: l, right :: r )+assertGreater = Proxy++assertEqual :: forall l r. Compare l r EQ => Proxy ( left :: l, right :: r )+assertEqual = Proxy++symmLt :: forall m n. Compare m n GT => Proxy ( left :: n, right :: m )+symmLt = assertLesser++symmGt :: forall m n. Compare m n LT => Proxy ( left :: n, right :: m )+symmGt = assertGreater++symmEq :: forall m n. Compare m n EQ => Proxy ( left :: n, right :: m )+symmEq = assertEqual++reflEq :: forall (n :: Int). Proxy ( left :: n, right :: n )+reflEq = assertEqual++transLt :: forall m n p. Compare m n LT => Compare n p LT => Proxy n -> Proxy ( left :: m, right :: p )+transLt _ = assertLesser++transLtEq :: forall m n p. Compare m n LT => Compare n p EQ => Proxy n -> Proxy ( left :: m, right :: p )+transLtEq _ = assertLesser++transEqLt :: forall m n p. Compare m n EQ => Compare n p LT => Proxy n -> Proxy ( left :: m, right :: p )+transEqLt _ = assertLesser++transGt :: forall m n p. Compare m n GT => Compare n p GT => Proxy n -> Proxy ( left :: m, right :: p )+transGt _ = assertGreater++transGtEq :: forall m n p. Compare m n GT => Compare n p EQ => Proxy n -> Proxy ( left :: m, right :: p )+transGtEq _ = assertGreater++transEqGt :: forall m n p. Compare m n EQ => Compare n p GT => Proxy n -> Proxy ( left :: m, right :: p )+transEqGt _ = assertGreater++transEq :: forall m n p. Compare m n EQ => Compare n p EQ => Proxy n -> Proxy ( left :: m, right :: p )+transEq _ = assertEqual++transSymmLt :: forall m n p. Compare n m GT => Compare n p LT => Proxy n -> Proxy ( left :: m, right :: p )+transSymmLt _ = assertLesser++transSymmLtEq :: forall m n p. Compare n m GT => Compare n p EQ => Proxy n -> Proxy ( left :: m, right :: p )+transSymmLtEq _ = assertLesser++transSymmEqLt :: forall m n p. Compare n m EQ => Compare n p LT => Proxy n -> Proxy ( left :: m, right :: p )+transSymmEqLt _ = assertLesser++transSymmGt :: forall m n p. Compare n m LT => Compare n p GT => Proxy n -> Proxy ( left :: m, right :: p )+transSymmGt _ = assertGreater++transSymmGtEq :: forall m n p. Compare n m LT => Compare n p EQ => Proxy n -> Proxy ( left :: m, right :: p )+transSymmGtEq _ = assertGreater++transSymmEqGt :: forall m n p. Compare n m EQ => Compare n p GT => Proxy n -> Proxy ( left :: m, right :: p )+transSymmEqGt _ = assertGreater++transSymmEq :: forall m n p. Compare n m EQ => Compare n p EQ => Proxy n -> Proxy ( left :: m, right :: p )+transSymmEq _ = assertEqual++litLt :: Proxy ( left :: 0, right :: 1 )+litLt = assertLesser++litGt :: Proxy ( left :: 1, right :: 0 )+litGt = assertGreater++litEq :: Proxy ( left :: 0, right :: 0 )+litEq = assertEqual++class AssertIsGT o where+  assertIsGT :: Proxy o -> Boolean++instance AssertIsGT GT where+  assertIsGT _ = true++infer :: forall l r o. Compare l r o => AssertIsGT o => Proxy l -> Proxy r -> Boolean+infer _ _ = assertIsGT (Proxy :: _ o)++inferSolved :: forall m n p. Compare m n GT => Compare n p GT => Proxy m -> Proxy n -> Proxy p -> Boolean+inferSolved m _ p = infer m p++litTransLT :: forall a. Compare a 10 LT => Proxy ( left :: a, right :: 20 )+litTransLT = assertLesser++litTransGT :: forall a. Compare a 10 GT => Proxy ( left :: a, right :: 0 )+litTransGT = assertGreater++litTransRange :: forall a o. Compare a 10 LT => Compare 0 a LT => Proxy ( left :: a, right :: 20 )+litTransRange = assertLesser++withFacts :: forall l r o. Compare l 10 LT => Compare r 20 GT => Proxy ( left :: l, right :: r )+withFacts = assertLesser++main = log "Done"
tests/purs/passing/SolvingCompareSymbol.purs view
@@ -3,7 +3,7 @@ import Prelude import Effect.Console (log) import Prim.Symbol (class Compare)-import Prim.Ordering (kind Ordering, LT, EQ, GT)+import Prim.Ordering (Ordering, LT, EQ, GT) import Type.Proxy (Proxy(..)) import Type.Data.Symbol (compare) as Symbol import Type.Data.Ordering (reflectOrdering)
tests/purs/passing/SolvingIsSymbol/Lib.purs view
@@ -1,10 +1,11 @@ module SolvingIsSymbol.Lib where  import Data.Symbol+import Type.Proxy (Proxy(..)) -literalSymbol :: SProxy "literal"-literalSymbol = SProxy+literalSymbol :: Proxy "literal"+literalSymbol = Proxy -libReflectSymbol :: forall s. IsSymbol s => SProxy s -> String+libReflectSymbol :: forall s. IsSymbol s => Proxy s -> String libReflectSymbol = reflectSymbol 
+ tests/purs/passing/SolvingMulInt.purs view
@@ -0,0 +1,14 @@+module Main where++import Effect.Console (log)+import Prim.Int (class Mul)++data Proxy k = Proxy++a :: forall n. Mul 4 4 n => Proxy n+a = Proxy++a' :: Proxy 16+a' = a++main = log "Done"
+ tests/purs/passing/SolvingReflectable.purs view
@@ -0,0 +1,50 @@+module Main where++import Prelude++import Data.Ordering (Ordering(..))+import Data.Reflectable (reflectType)+import Effect.Console (log)+import Prim.Boolean (True, False)+import Prim.Ordering (LT, EQ, GT)+import Type.Proxy (Proxy(..))++refInt :: Proxy 42+refInt = Proxy++refIntPass :: Boolean+refIntPass = reflectType refInt == 42++refString :: Proxy "PureScript"+refString = Proxy++refStringPass :: Boolean+refStringPass = reflectType refString == "PureScript"++refBooleanT :: Proxy True+refBooleanT = Proxy++refBooleanF :: Proxy False+refBooleanF = Proxy++refBooleanPass :: Boolean+refBooleanPass = reflectType refBooleanT == true && reflectType refBooleanF == false++refOrderingLT :: Proxy LT+refOrderingLT = Proxy++refOrderingEQ :: Proxy EQ+refOrderingEQ = Proxy++refOrderingGT :: Proxy GT+refOrderingGT = Proxy++refOrderingPass :: Boolean+refOrderingPass =+  reflectType refOrderingLT == LT+  && reflectType refOrderingEQ == EQ+  && reflectType refOrderingGT == GT++main = do+  when (refIntPass && refStringPass && refBooleanPass && refOrderingPass) $+    log "Done"
tests/purs/passing/StringEdgeCases/Symbols.purs view
@@ -6,15 +6,16 @@ import Prelude import Effect.Console (log) import Prim.Symbol (class Append)-import Type.Data.Symbol (SProxy(..), reflectSymbol)+import Type.Data.Symbol (reflectSymbol) import Type.Data.Symbol (append) as Symbol import Test.Assert (assert')+import Type.Proxy (Proxy(..)) -highS :: SProxy "\xd834"-highS = SProxy+highS :: Proxy "\xd834"+highS = Proxy -lowS :: SProxy "\xdf06"-lowS = SProxy+lowS :: Proxy "\xdf06"+lowS = Proxy  loneSurrogates :: Boolean loneSurrogates = reflectSymbol (Symbol.append highS lowS) == "\x1d306"
tests/purs/publish/basic-example/output/Control.Applicative/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Control.Applicative","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"pure","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]}},"sourceSpan":{"start":[34,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[34,29]}},{"comments":null,"title":"applicativeFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Applicative"],"Applicative"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[37,15]}},{"comments":null,"title":"applicativeArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Applicative"],"Applicative"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[40,15]}},{"comments":null,"title":"applicativeProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Applicative"],"Applicative"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[43,17]}}],"comments":"The `Applicative` type class extends the [`Apply`](#apply) type class\nwith a `pure` function, which can be used to create values of type `f a`\nfrom values of type `a`.\n\nWhere [`Apply`](#apply) provides the ability to lift functions of two or\nmore arguments to functions whose arguments are wrapped using `f`, and\n[`Functor`](#functor) provides the ability to lift functions of one\nargument, `pure` can be seen as the function which lifts functions of\n_zero_ arguments. That is, `Applicative` functors support a lifting\noperation for any number of function arguments.\n\nInstances must satisfy the following laws in addition to the `Apply`\nlaws:\n\n- Identity: `(pure identity) <*> v = v`\n- Composition: `pure (<<<) <*> f <*> g <*> h = f <*> (g <*> h)`\n- Homomorphism: `(pure f) <*> (pure x) = pure (f x)`\n- Interchange: `u <*> (pure y) = (pure (_ $ y)) <*> u`\n","title":"Applicative","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[34,29]}},{"kind":null,"children":[],"comments":"`liftA1` provides a default implementation of `(<$>)` for any\n[`Applicative`](#applicative) functor, without using `(<$>)` as provided\nby the [`Functor`](#functor)-[`Applicative`](#applicative) superclass\nrelationship.\n\n`liftA1` can therefore be used to write [`Functor`](#functor) instances\nas follows:\n\n```purescript\ninstance functorF :: Functor F where\n  map = liftA1\n```\n","title":"liftA1","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Applicative"],"Applicative"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[57,64]}},{"kind":null,"children":[],"comments":"Perform an applicative action unless a condition is true.\n","title":"unless","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Applicative"],"Applicative"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]}},"sourceSpan":{"start":[66,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[66,65]}},{"kind":null,"children":[],"comments":"Perform an applicative action when a condition is true.\n","title":"when","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Applicative"],"Applicative"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[61,63]}}]}+{"reExports":[],"name":"Control.Applicative","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"pure","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]}},"sourceSpan":{"start":[36,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[36,29]}},{"comments":null,"title":"applicativeFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Applicative"],"Applicative"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[39,15]}},{"comments":null,"title":"applicativeArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Applicative"],"Applicative"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[41,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[42,17]}},{"comments":null,"title":"applicativeProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Applicative"],"Applicative"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[45,17]}}],"comments":"The `Applicative` type class extends the [`Apply`](#apply) type class\nwith a `pure` function, which can be used to create values of type `f a`\nfrom values of type `a`.\n\nWhere [`Apply`](#apply) provides the ability to lift functions of two or\nmore arguments to functions whose arguments are wrapped using `f`, and\n[`Functor`](#functor) provides the ability to lift functions of one\nargument, `pure` can be seen as the function which lifts functions of\n_zero_ arguments. That is, `Applicative` functors support a lifting\noperation for any number of function arguments.\n\nInstances must satisfy the following laws in addition to the `Apply`\nlaws:\n\n- Identity: `(pure identity) <*> v = v`\n- Composition: `pure (<<<) <*> f <*> g <*> h = f <*> (g <*> h)`\n- Homomorphism: `(pure f) <*> (pure x) = pure (f x)`\n- Interchange: `u <*> (pure y) = (pure (_ $ y)) <*> u`\n","title":"Applicative","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[36,29]}},{"kind":null,"children":[],"comments":"`liftA1` provides a default implementation of `(<$>)` for any\n[`Applicative`](#applicative) functor, without using `(<$>)` as provided\nby the [`Functor`](#functor)-[`Applicative`](#applicative) superclass\nrelationship.\n\n`liftA1` can therefore be used to write [`Functor`](#functor) instances\nas follows:\n\n```purescript\ninstance functorF :: Functor F where\n  map = liftA1\n```\n","title":"liftA1","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Applicative"],"Applicative"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[59,64]}},{"kind":null,"children":[],"comments":"Perform an applicative action unless a condition is true.\n","title":"unless","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Applicative"],"Applicative"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[68,65]}},{"kind":null,"children":[],"comments":"Perform an applicative action when a condition is true.\n","title":"when","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Applicative"],"Applicative"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]}},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs","end":[63,63]}}]}
tests/purs/publish/basic-example/output/Control.Apply/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Control.Apply","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"apply","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[46,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[46,48]}},{"comments":null,"title":"applyFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Apply"],"Apply"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[51,26]}},{"comments":null,"title":"applyArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Apply"],"Apply"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[54,21]}},{"comments":null,"title":"applyProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Apply"],"Apply"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[59,20]}}],"comments":"The `Apply` class provides the `(<*>)` which is used to apply a function\nto an argument under a type constructor.\n\n`Apply` can be used to lift functions of two or more arguments to work on\nvalues wrapped with the type constructor `f`. It might also be understood\nin terms of the `lift2` function:\n\n```purescript\nlift2 :: forall f a b c. Apply f => (a -> b -> c) -> f a -> f b -> f c\nlift2 f a b = f <$> a <*> b\n```\n\n`(<*>)` is recovered from `lift2` as `lift2 ($)`. That is, `(<*>)` lifts\nthe function application operator `($)` to arguments wrapped with the\ntype constructor `f`.\n\nPut differently...\n```\nfoo =\n  functionTakingNArguments <$> computationProducingArg1\n                           <*> computationProducingArg2\n                           <*> ...\n                           <*> computationProducingArgN\n```\n\nInstances must satisfy the following law in addition to the `Functor`\nlaws:\n\n- Associative composition: `(<<<) <$> f <*> g <*> h = f <*> (g <*> h)`\n\nFormally, `Apply` represents a strong lax semi-monoidal endofunctor.\n","title":"Apply","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[46,48]}},{"kind":null,"children":[],"comments":null,"title":"(<*>)","info":{"declType":"alias","alias":[["Control","Apply"],{"Right":{"Left":{"Ident":"apply"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[48,22]}},{"kind":null,"children":[],"comments":"Combine two effectful actions, keeping only the result of the first.\n","title":"applyFirst","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[62,57]}},{"kind":null,"children":[],"comments":null,"title":"(<*)","info":{"declType":"alias","alias":[["Control","Apply"],{"Right":{"Left":{"Ident":"applyFirst"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[65,26]}},{"kind":null,"children":[],"comments":"Combine two effectful actions, keeping only the result of the second.\n","title":"applySecond","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[68,58]}},{"kind":null,"children":[],"comments":null,"title":"(*>)","info":{"declType":"alias","alias":[["Control","Apply"],{"Right":{"Left":{"Ident":"applySecond"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[71,27]}},{"kind":null,"children":[],"comments":"Lift a function of two arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n\n```purescript\nlift2 add (Just 1) (Just 2) == Just 3\nlift2 add Nothing (Just 2) == Nothing\n```\n\n","title":"lift2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[81,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[81,71]}},{"kind":null,"children":[],"comments":"Lift a function of three arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n","title":"lift3","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["d",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]}]}]}]}]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[86,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[86,85]}},{"kind":null,"children":[],"comments":"Lift a function of four arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n","title":"lift4","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["d",{"annotation":[],"tag":"ForAll","contents":["e",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"d"}]},{"annotation":[],"tag":"TypeVar","contents":"e"}]}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"e"}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[91,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[91,99]}},{"kind":null,"children":[],"comments":"Lift a function of five arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n","title":"lift5","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["d",{"annotation":[],"tag":"ForAll","contents":["e",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"d"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"e"}]},{"annotation":[],"tag":"TypeVar","contents":"g"}]}]}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"e"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"g"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[96,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[96,113]}}]}+{"reExports":[],"name":"Control.Apply","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"apply","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[53,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[53,48]}},{"comments":null,"title":"applyFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Apply"],"Apply"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[58,26]}},{"comments":null,"title":"applyArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Apply"],"Apply"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[61,21]}},{"comments":null,"title":"applyProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Apply"],"Apply"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[66,20]}}],"comments":"The `Apply` class provides the `(<*>)` which is used to apply a function\nto an argument under a type constructor.\n\n`Apply` can be used to lift functions of two or more arguments to work on\nvalues wrapped with the type constructor `f`. It might also be understood\nin terms of the `lift2` function:\n\n```purescript\nlift2 :: forall f a b c. Apply f => (a -> b -> c) -> f a -> f b -> f c\nlift2 f a b = f <$> a <*> b\n```\n\n`(<*>)` is recovered from `lift2` as `lift2 ($)`. That is, `(<*>)` lifts\nthe function application operator `($)` to arguments wrapped with the\ntype constructor `f`.\n\nPut differently...\n```\nfoo =\n  functionTakingNArguments <$> computationProducingArg1\n                           <*> computationProducingArg2\n                           <*> ...\n                           <*> computationProducingArgN\n```\n\nInstances must satisfy the following law in addition to the `Functor`\nlaws:\n\n- Associative composition: `(<<<) <$> f <*> g <*> h = f <*> (g <*> h)`\n\nFormally, `Apply` represents a strong lax semi-monoidal endofunctor.\n","title":"Apply","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[53,48]}},{"kind":null,"children":[],"comments":null,"title":"(<*>)","info":{"declType":"alias","alias":[["Control","Apply"],{"Right":{"Left":{"Ident":"apply"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[55,22]}},{"kind":null,"children":[],"comments":"Combine two effectful actions, keeping only the result of the first.\n","title":"applyFirst","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[69,57]}},{"kind":null,"children":[],"comments":null,"title":"(<*)","info":{"declType":"alias","alias":[["Control","Apply"],{"Right":{"Left":{"Ident":"applyFirst"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[72,26]}},{"kind":null,"children":[],"comments":"Combine two effectful actions, keeping only the result of the second.\n","title":"applySecond","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[75,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[75,58]}},{"kind":null,"children":[],"comments":null,"title":"(*>)","info":{"declType":"alias","alias":[["Control","Apply"],{"Right":{"Left":{"Ident":"applySecond"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[78,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[78,27]}},{"kind":null,"children":[],"comments":"Lift a function of two arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n\n```purescript\nlift2 add (Just 1) (Just 2) == Just 3\nlift2 add Nothing (Just 2) == Nothing\n```\n\n","title":"lift2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[88,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[88,71]}},{"kind":null,"children":[],"comments":"Lift a function of three arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n","title":"lift3","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["d",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]}]}]}]}]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[93,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[93,85]}},{"kind":null,"children":[],"comments":"Lift a function of four arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n","title":"lift4","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["d",{"annotation":[],"tag":"ForAll","contents":["e",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"d"}]},{"annotation":[],"tag":"TypeVar","contents":"e"}]}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"e"}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[98,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[98,99]}},{"kind":null,"children":[],"comments":"Lift a function of five arguments to a function which accepts and returns\nvalues wrapped with the type constructor `f`.\n","title":"lift5","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["d",{"annotation":[],"tag":"ForAll","contents":["e",{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"d"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"e"}]},{"annotation":[],"tag":"TypeVar","contents":"g"}]}]}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"d"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"e"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"g"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[103,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs","end":[103,113]}}]}
tests/purs/publish/basic-example/output/Control.Bind/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Control.Bind","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"bind","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[51,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[51,47]}},{"comments":null,"title":"bindFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Bind"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[66,25]}},{"comments":"The `bind`/`>>=` function for `Array` works by applying a function to\neach element in the array, and flattening the results into a single,\nnew array.\n\nArray's `bind`/`>>=` works like a nested for loop. Each `bind` adds\nanother level of nesting in the loop. For example:\n```\nfoo :: Array String\nfoo =\n  [\"a\", \"b\"] >>= \\eachElementInArray1 ->\n    [\"c\", \"d\"] >>= \\eachElementInArray2\n      pure (eachElementInArray1 <> eachElementInArray2)\n\n-- In other words...\nfoo\n-- ... is the same as...\n[ (\"a\" <> \"c\"), (\"a\" <> \"d\"), (\"b\" <> \"c\"), (\"b\" <> \"d\") ]\n-- which simplifies to...\n[ \"ac\", \"ad\", \"bc\", \"bd\" ]\n```\n","title":"bindArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Bind"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[88,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[89,19]}},{"comments":null,"title":"bindProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Bind"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[93,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[94,19]}}],"comments":"The `Bind` type class extends the [`Apply`](#apply) type class with a\n\"bind\" operation `(>>=)` which composes computations in sequence, using\nthe return value of one computation to determine the next computation.\n\nThe `>>=` operator can also be expressed using `do` notation, as follows:\n\n```purescript\nx >>= f = do y <- x\n             f y\n```\n\nwhere the function argument of `f` is given the name `y`.\n\nInstances must satisfy the following laws in addition to the `Apply`\nlaws:\n\n- Associativity: `(x >>= f) >>= g = x >>= (\\k -> f k >>= g)`\n- Apply Superclass: `apply f x = f >>= \\f’ -> map f’ x`\n\nAssociativity tells us that we can regroup operations which use `do`\nnotation so that we can unambiguously write, for example:\n\n```purescript\ndo x <- m1\n   y <- m2 x\n   m3 x y\n```\n","title":"Bind","info":{"fundeps":[],"arguments":[["m",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[51,47]}},{"kind":null,"children":[],"comments":null,"title":"(>>=)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"bind"}}}],"fixity":{"associativity":"infixl","precedence":1}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[53,21]}},{"kind":null,"children":[],"comments":"`bindFlipped` is `bind` with its arguments reversed. For example:\n\n```purescript\nprint =<< random\n```\n","title":"bindFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[60,64]}},{"kind":null,"children":[],"comments":null,"title":"(=<<)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"bindFlipped"}}}],"fixity":{"associativity":"infixr","precedence":1}},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[63,28]}},{"kind":null,"children":[{"comments":null,"title":"discard","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]}},"sourceSpan":{"start":[102,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[102,60]}},{"comments":null,"title":"discardUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Discard"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[104,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[105,17]}},{"comments":null,"title":"discardProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Discard"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[107,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[108,17]}},{"comments":null,"title":"discardProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Discard"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[110,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[111,17]}},{"comments":null,"title":"discardProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Discard"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[113,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[114,17]}}],"comments":"A class for types whose values can safely be discarded\nin a `do` notation block.\n\nAn example is the `Unit` type, since there is only one\npossible value which can be returned.\n","title":"Discard","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[101,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[102,60]}},{"kind":null,"children":[],"comments":"Collapse two applications of a monadic type constructor into one.\n","title":"join","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]},null]}},"sourceSpan":{"start":[117,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[117,45]}},{"kind":null,"children":[],"comments":"Forwards Kleisli composition.\n\nFor example:\n\n```purescript\nimport Data.Array (head, tail)\n\nthird = tail >=> tail >=> head\n```\n","title":"composeKleisli","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[129,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[129,81]}},{"kind":null,"children":[],"comments":null,"title":"(>=>)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"composeKleisli"}}}],"fixity":{"associativity":"infixr","precedence":1}},"sourceSpan":{"start":[132,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[132,31]}},{"kind":null,"children":[],"comments":"Backwards Kleisli composition.\n","title":"composeKleisliFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[135,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[135,88]}},{"kind":null,"children":[],"comments":null,"title":"(<=<)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"composeKleisliFlipped"}}}],"fixity":{"associativity":"infixr","precedence":1}},"sourceSpan":{"start":[138,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[138,38]}},{"kind":null,"children":[],"comments":"Execute a monadic action if a condition holds.\n\nFor example:\n\n```purescript\nmain = ifM ((< 0.5) <$> random)\n         (trace \"Heads\")\n         (trace \"Tails\")\n```\n","title":"ifM","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[149,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[149,60]}}]}+{"reExports":[],"name":"Control.Bind","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"bind","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[57,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[57,47]}},{"comments":null,"title":"bindFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Bind"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[72,25]}},{"comments":"The `bind`/`>>=` function for `Array` works by applying a function to\neach element in the array, and flattening the results into a single,\nnew array.\n\nArray's `bind`/`>>=` works like a nested for loop. Each `bind` adds\nanother level of nesting in the loop. For example:\n```\nfoo :: Array String\nfoo =\n  [\"a\", \"b\"] >>= \\eachElementInArray1 ->\n    [\"c\", \"d\"] >>= \\eachElementInArray2\n      pure (eachElementInArray1 <> eachElementInArray2)\n\n-- In other words...\nfoo\n-- ... is the same as...\n[ (\"a\" <> \"c\"), (\"a\" <> \"d\"), (\"b\" <> \"c\"), (\"b\" <> \"d\") ]\n-- which simplifies to...\n[ \"ac\", \"ad\", \"bc\", \"bd\" ]\n```\n","title":"bindArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Bind"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[94,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[95,19]}},{"comments":null,"title":"bindProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Bind"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[99,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[100,19]}}],"comments":"The `Bind` type class extends the [`Apply`](#apply) type class with a\n\"bind\" operation `(>>=)` which composes computations in sequence, using\nthe return value of one computation to determine the next computation.\n\nThe `>>=` operator can also be expressed using `do` notation, as follows:\n\n```purescript\nx >>= f = do y <- x\n             f y\n```\n\nwhere the function argument of `f` is given the name `y`.\n\nInstances must satisfy the following laws in addition to the `Apply`\nlaws:\n\n- Associativity: `(x >>= f) >>= g = x >>= (\\k -> f k >>= g)`\n- Apply Superclass: `apply f x = f >>= \\f’ -> map f’ x`\n\nAssociativity tells us that we can regroup operations which use `do`\nnotation so that we can unambiguously write, for example:\n\n```purescript\ndo x <- m1\n   y <- m2 x\n   m3 x y\n```\n","title":"Bind","info":{"fundeps":[],"arguments":[["m",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Control","Apply"],"Apply"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[56,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[57,47]}},{"kind":null,"children":[],"comments":null,"title":"(>>=)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"bind"}}}],"fixity":{"associativity":"infixl","precedence":1}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[59,21]}},{"kind":null,"children":[],"comments":"`bindFlipped` is `bind` with its arguments reversed. For example:\n\n```purescript\nprint =<< random\n```\n","title":"bindFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[66,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[66,64]}},{"kind":null,"children":[],"comments":null,"title":"(=<<)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"bindFlipped"}}}],"fixity":{"associativity":"infixr","precedence":1}},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[69,28]}},{"kind":null,"children":[{"comments":null,"title":"discard","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]}},"sourceSpan":{"start":[108,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[108,60]}},{"comments":null,"title":"discardUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Discard"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[110,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[111,17]}},{"comments":null,"title":"discardProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Bind"],"Discard"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[113,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[114,17]}}],"comments":"A class for types whose values can safely be discarded\nin a `do` notation block.\n\nAn example is the `Unit` type, since there is only one\npossible value which can be returned.\n","title":"Discard","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[107,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[108,60]}},{"kind":null,"children":[],"comments":"Collapse two applications of a monadic type constructor into one.\n","title":"join","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]},null]}},"sourceSpan":{"start":[117,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[117,45]}},{"kind":null,"children":[],"comments":"Forwards Kleisli composition.\n\nFor example:\n\n```purescript\nimport Data.Array (head, tail)\n\nthird = tail >=> tail >=> head\n```\n","title":"composeKleisli","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[129,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[129,81]}},{"kind":null,"children":[],"comments":null,"title":"(>=>)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"composeKleisli"}}}],"fixity":{"associativity":"infixr","precedence":1}},"sourceSpan":{"start":[132,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[132,31]}},{"kind":null,"children":[],"comments":"Backwards Kleisli composition.\n","title":"composeKleisliFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[135,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[135,88]}},{"kind":null,"children":[],"comments":null,"title":"(<=<)","info":{"declType":"alias","alias":[["Control","Bind"],{"Right":{"Left":{"Ident":"composeKleisliFlipped"}}}],"fixity":{"associativity":"infixr","precedence":1}},"sourceSpan":{"start":[138,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[138,38]}},{"kind":null,"children":[],"comments":"Execute a monadic action if a condition holds.\n\nFor example:\n\n```purescript\nmain = ifM ((< 0.5) <$> random)\n         (trace \"Heads\")\n         (trace \"Tails\")\n```\n","title":"ifM","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Control","Bind"],"Bind"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[149,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs","end":[149,60]}}]}
tests/purs/publish/basic-example/output/Control.Category/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Control.Category","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"ForAll","contents":["k",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]}}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},null]},"keyword":"class"},"children":[{"comments":null,"title":"identity","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},null]}},"sourceSpan":{"start":[18,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Category.purs","end":[18,30]}},{"comments":null,"title":"categoryFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Category"],"Category"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]}]}},"sourceSpan":{"start":[20,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Category.purs","end":[21,17]}}],"comments":"`Category`s consist of objects and composable morphisms between them, and\nas such are [`Semigroupoids`](#semigroupoid), but unlike `semigroupoids`\nmust have an identity element.\n\nInstances must satisfy the following law in addition to the\n`Semigroupoid` law:\n\n- Identity: `identity <<< p = p <<< identity = p`\n","title":"Category","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Control","Semigroupoid"],"Semigroupoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[17,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Category.purs","end":[18,30]}}]}+{"reExports":[],"name":"Control.Category","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"ForAll","contents":["k",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]}}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},null]},"keyword":"class"},"children":[{"comments":null,"title":"identity","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},null]}},"sourceSpan":{"start":[19,3],"name":"../../../support/bower_components/purescript-prelude/src/Control/Category.purs","end":[19,30]}},{"comments":null,"title":"categoryFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Control","Category"],"Category"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]}]}},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Category.purs","end":[22,17]}}],"comments":"`Category`s consist of objects and composable morphisms between them, and\nas such are [`Semigroupoids`](#semigroupoid), but unlike `semigroupoids`\nmust have an identity element.\n\nInstances must satisfy the following law in addition to the\n`Semigroupoid` law:\n\n- Identity: `identity <<< p = p <<< identity = p`\n","title":"Category","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Control","Semigroupoid"],"Semigroupoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[18,1],"name":"../../../support/bower_components/purescript-prelude/src/Control/Category.purs","end":[19,30]}}]}
tests/purs/publish/basic-example/output/Data.BooleanAlgebra/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.BooleanAlgebra","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"booleanAlgebraBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[24,57]}},{"comments":null,"title":"booleanAlgebraUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[25,51]}},{"comments":null,"title":"booleanAlgebraFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[26,73]}},{"comments":null,"title":"booleanAlgebraRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[27,123]}},{"comments":null,"title":"booleanAlgebraProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[28,57]}},{"comments":null,"title":"booleanAlgebraProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[29,59]}},{"comments":null,"title":"booleanAlgebraProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[30,59]}}],"comments":"The `BooleanAlgebra` type class represents types that behave like boolean\nvalues.\n\nInstances should satisfy the following laws in addition to the\n`HeytingAlgebra` law:\n\n- Excluded middle:\n  - `a || not a = tt`\n","title":"BooleanAlgebra","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[22,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[22,43]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"booleanAlgebraRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[37,71]}},{"comments":null,"title":"booleanAlgebraRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[45,71]}}],"comments":"A class for records where all fields have `BooleanAlgebra` instances, used\nto implement the `BooleanAlgebra` instance for records.\n","title":"BooleanAlgebraRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[35,109]}}]}+{"reExports":[],"name":"Data.BooleanAlgebra","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"booleanAlgebraBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[24,57]}},{"comments":null,"title":"booleanAlgebraUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[25,51]}},{"comments":null,"title":"booleanAlgebraFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[26,73]}},{"comments":null,"title":"booleanAlgebraRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[27,123]}},{"comments":null,"title":"booleanAlgebraProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[28,57]}}],"comments":"The `BooleanAlgebra` type class represents types that behave like boolean\nvalues.\n\nInstances should satisfy the following laws in addition to the\n`HeytingAlgebra` law:\n\n- Excluded middle:\n  - `a || not a = tt`\n","title":"BooleanAlgebra","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[22,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[22,43]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"booleanAlgebraRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[35,71]}},{"comments":null,"title":"booleanAlgebraRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","BooleanAlgebra"],"BooleanAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","BooleanAlgebra"],"BooleanAlgebraRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[43,66]}}],"comments":"A class for records where all fields have `BooleanAlgebra` instances, used\nto implement the `BooleanAlgebra` instance for records.\n","title":"BooleanAlgebraRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs","end":[33,109]}}]}
tests/purs/publish/basic-example/output/Data.Bounded/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Bounded","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"top","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[24,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[24,11]}},{"comments":null,"title":"bottom","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[25,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[25,14]}},{"comments":null,"title":"boundedBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[29,17]}},{"comments":"The `Bounded` `Int` instance has `top :: Int` equal to 2^31 - 1,\nand `bottom :: Int` equal to -2^31, since these are the largest and smallest\nintegers representable by twos-complement 32-bit integers, respectively.\n","title":"boundedInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[36,21]}},{"comments":"Characters fall within the Unicode range.\n","title":"boundedChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[44,22]}},{"comments":null,"title":"boundedOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[51,14]}},{"comments":null,"title":"boundedUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[55,16]}},{"comments":null,"title":"boundedNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[62,24]}},{"comments":null,"title":"boundedProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[64,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[66,14]}},{"comments":null,"title":"boundedProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[70,15]}},{"comments":null,"title":"boundedProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[74,15]}},{"comments":null,"title":"boundedRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Bounded"],"BoundedRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[107,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[113,67]}}],"comments":"The `Bounded` type class represents totally ordered types that have an\nupper and lower boundary.\n\nInstances should satisfy the following law in addition to the `Ord` laws:\n\n- Bounded: `bottom <= a <= top`\n","title":"Bounded","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[25,14]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"topRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"ForAll","contents":["rproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rproxy"},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]},null]}},"sourceSpan":{"start":[78,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[78,85]}},{"comments":null,"title":"bottomRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"ForAll","contents":["rproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rproxy"},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]},null]}},"sourceSpan":{"start":[79,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[79,88]}},{"comments":null,"title":"boundedRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"BoundedRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[81,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[83,24]}},{"comments":null,"title":"boundedRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Bounded"],"Bounded"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"rowTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Bounded"],"BoundedRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"BoundedRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[85,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[105,64]}}],"comments":null,"title":"BoundedRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"OrdRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[77,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[79,88]}}]}+{"reExports":[],"name":"Data.Bounded","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"top","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[26,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[26,11]}},{"comments":null,"title":"bottom","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[27,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[27,14]}},{"comments":null,"title":"boundedBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[31,17]}},{"comments":"The `Bounded` `Int` instance has `top :: Int` equal to 2^31 - 1,\nand `bottom :: Int` equal to -2^31, since these are the largest and smallest\nintegers representable by twos-complement 32-bit integers, respectively.\n","title":"boundedInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[38,21]}},{"comments":"Characters fall within the Unicode range.\n","title":"boundedChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[46,22]}},{"comments":null,"title":"boundedOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[53,14]}},{"comments":null,"title":"boundedUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[57,16]}},{"comments":null,"title":"boundedNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[64,24]}},{"comments":null,"title":"boundedProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[66,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[68,14]}},{"comments":null,"title":"boundedRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Bounded"],"BoundedRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"Bounded"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[99,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[105,67]}}],"comments":"The `Bounded` type class represents totally ordered types that have an\nupper and lower boundary.\n\nInstances should satisfy the following law in addition to the `Ord` laws:\n\n- Bounded: `bottom <= a <= top`\n","title":"Bounded","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[27,14]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"topRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[72,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[72,59]}},{"comments":null,"title":"bottomRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[73,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[73,62]}},{"comments":null,"title":"boundedRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"BoundedRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[75,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[77,24]}},{"comments":null,"title":"boundedRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Bounded"],"Bounded"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"rowTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Bounded"],"BoundedRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Bounded"],"BoundedRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[79,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[97,62]}}],"comments":null,"title":"BoundedRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"OrdRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs","end":[73,62]}}]}
tests/purs/publish/basic-example/output/Data.CommutativeRing/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.CommutativeRing","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"commutativeRingInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[25,51]}},{"comments":null,"title":"commutativeRingNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[26,57]}},{"comments":null,"title":"commutativeRingUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[27,53]}},{"comments":null,"title":"commutativeRingFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[28,76]}},{"comments":null,"title":"commutativeRingRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[29,126]}},{"comments":null,"title":"commutativeRingProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[30,59]}},{"comments":null,"title":"commutativeRingProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[31,61]}},{"comments":null,"title":"commutativeRingProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[32,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[32,61]}}],"comments":"The `CommutativeRing` class is for rings where multiplication is\ncommutative.\n\nInstances must satisfy the following law in addition to the `Ring`\nlaws:\n\n- Commutative multiplication: `a * b = b * a`\n","title":"CommutativeRing","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[23,34]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"commutativeRingRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRingRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[38,73]}},{"comments":null,"title":"commutativeRingRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRingRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[46,72]}}],"comments":"A class for records where all fields have `CommutativeRing` instances, used\nto implement the `CommutativeRing` instance for records.\n","title":"CommutativeRingRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"RingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[36,100]}}]}+{"reExports":[],"name":"Data.CommutativeRing","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"commutativeRingInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[25,51]}},{"comments":null,"title":"commutativeRingNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[26,57]}},{"comments":null,"title":"commutativeRingUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[27,53]}},{"comments":null,"title":"commutativeRingFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[28,76]}},{"comments":null,"title":"commutativeRingRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[29,126]}},{"comments":null,"title":"commutativeRingProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRing"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[30,59]}}],"comments":"The `CommutativeRing` class is for rings where multiplication is\ncommutative.\n\nInstances must satisfy the following law in addition to the `Ring`\nlaws:\n\n- Commutative multiplication: `a * b = b * a`\n","title":"CommutativeRing","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[23,34]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"commutativeRingRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRingRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[36,73]}},{"comments":null,"title":"commutativeRingRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","CommutativeRing"],"CommutativeRingRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[44,67]}}],"comments":"A class for records where all fields have `CommutativeRing` instances, used\nto implement the `CommutativeRing` instance for records.\n","title":"CommutativeRingRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"RingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs","end":[34,100]}}]}
tests/purs/publish/basic-example/output/Data.Eq/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Eq","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"eq","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}},"sourceSpan":{"start":[29,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[29,26]}},{"comments":null,"title":"eqBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[41,21]}},{"comments":null,"title":"eqInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[44,17]}},{"comments":null,"title":"eqNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[47,20]}},{"comments":null,"title":"eqChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[50,18]}},{"comments":null,"title":"eqString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[53,20]}},{"comments":null,"title":"eqUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[56,16]}},{"comments":null,"title":"eqVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[59,16]}},{"comments":null,"title":"eqArray","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[62,22]}},{"comments":null,"title":"eqRec","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Eq"],"EqRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[64,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[65,38]}},{"comments":null,"title":"eqProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[67,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[68,16]}},{"comments":null,"title":"eqProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[70,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[71,16]}},{"comments":null,"title":"eqProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[73,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[74,16]}}],"comments":"The `Eq` type class represents types which support decidable equality.\n\n`Eq` instances should satisfy the following laws:\n\n- Reflexivity: `x == x = true`\n- Symmetry: `x == y = y == x`\n- Transitivity: if `x == y` and `y == z` then `x == z`\n\n**Note:** The `Number` type is not an entirely law abiding member of this\nclass due to the presence of `NaN`, since `NaN /= NaN`. Additionally,\ncomputing with `Number` can result in a loss of precision, so sometimes\nvalues that should be equivalent are not.\n","title":"Eq","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[29,26]}},{"kind":null,"children":[],"comments":null,"title":"(==)","info":{"declType":"alias","alias":[["Data","Eq"],{"Right":{"Left":{"Ident":"eq"}}}],"fixity":{"associativity":"infix","precedence":4}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[31,17]}},{"kind":null,"children":[],"comments":"`notEq` tests whether one value is _not equal_ to another. Shorthand for\n`not (eq x y)`.\n","title":"notEq","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[35,45]}},{"kind":null,"children":[],"comments":null,"title":"(/=)","info":{"declType":"alias","alias":[["Data","Eq"],{"Right":{"Left":{"Ident":"notEq"}}}],"fixity":{"associativity":"infix","precedence":4}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[38,20]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"eq1","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[86,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[86,49]}},{"comments":null,"title":"eq1Array","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq1"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[88,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[89,11]}}],"comments":"The `Eq1` type class represents type constructors with decidable equality.\n","title":"Eq1","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[85,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[86,49]}},{"kind":null,"children":[],"comments":null,"title":"notEq1","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq1"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[91,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[91,61]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"eqRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[98,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[98,85]}},{"comments":null,"title":"eqRowNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"EqRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[100,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[101,24]}},{"comments":null,"title":"eqRowCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"EqRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"rowTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"EqRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[103,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[114,57]}}],"comments":"A class for records where all fields have `Eq` instances, used to implement\nthe `Eq` instance for records.\n","title":"EqRecord","info":{"fundeps":[],"arguments":[["rowlist",null],["row",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[97,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[98,85]}}]}+{"reExports":[],"name":"Data.Eq","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"eq","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}},"sourceSpan":{"start":[36,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[36,26]}},{"comments":null,"title":"eqBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[47,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[48,21]}},{"comments":null,"title":"eqInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[51,17]}},{"comments":null,"title":"eqNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[54,20]}},{"comments":null,"title":"eqChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[56,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[57,18]}},{"comments":null,"title":"eqString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[60,20]}},{"comments":null,"title":"eqUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[63,16]}},{"comments":null,"title":"eqVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[66,16]}},{"comments":null,"title":"eqArray","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[69,22]}},{"comments":null,"title":"eqRec","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Eq"],"EqRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[72,38]}},{"comments":null,"title":"eqProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[74,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[75,16]}}],"comments":"The `Eq` type class represents types which support decidable equality.\n\n`Eq` instances should satisfy the following laws:\n\n- Reflexivity: `x == x = true`\n- Symmetry: `x == y = y == x`\n- Transitivity: if `x == y` and `y == z` then `x == z`\n\n**Note:** The `Number` type is not an entirely law abiding member of this\nclass due to the presence of `NaN`, since `NaN /= NaN`. Additionally,\ncomputing with `Number` can result in a loss of precision, so sometimes\nvalues that should be equivalent are not.\n","title":"Eq","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[36,26]}},{"kind":null,"children":[],"comments":null,"title":"(==)","info":{"declType":"alias","alias":[["Data","Eq"],{"Right":{"Left":{"Ident":"eq"}}}],"fixity":{"associativity":"infix","precedence":4}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[38,17]}},{"kind":null,"children":[],"comments":"`notEq` tests whether one value is _not equal_ to another. Shorthand for\n`not (eq x y)`.\n","title":"notEq","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[42,45]}},{"kind":null,"children":[],"comments":null,"title":"(/=)","info":{"declType":"alias","alias":[["Data","Eq"],{"Right":{"Left":{"Ident":"notEq"}}}],"fixity":{"associativity":"infix","precedence":4}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[45,20]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"eq1","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[87,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[87,49]}},{"comments":null,"title":"eq1Array","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq1"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[89,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[90,11]}}],"comments":"The `Eq1` type class represents type constructors with decidable equality.\n","title":"Eq1","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[86,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[87,49]}},{"kind":null,"children":[],"comments":null,"title":"notEq1","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq1"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[92,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[92,61]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"eqRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]}},"sourceSpan":{"start":[99,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[99,67]}},{"comments":null,"title":"eqRowNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"EqRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[101,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[102,24]}},{"comments":null,"title":"eqRowCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"EqRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"rowTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"EqRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[104,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[115,55]}}],"comments":"A class for records where all fields have `Eq` instances, used to implement\nthe `Eq` instance for records.\n","title":"EqRecord","info":{"fundeps":[],"arguments":[["rowlist",null],["row",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[98,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs","end":[99,67]}}]}
tests/purs/publish/basic-example/output/Data.EuclideanRing/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.EuclideanRing","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"degree","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[64,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[64,21]}},{"comments":null,"title":"div","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[65,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[65,21]}},{"comments":null,"title":"mod","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[66,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[66,21]}},{"comments":null,"title":"euclideanRingInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","EuclideanRing"],"EuclideanRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[70,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[73,15]}},{"comments":null,"title":"euclideanRingNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","EuclideanRing"],"EuclideanRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[75,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[78,16]}}],"comments":"The `EuclideanRing` class is for commutative rings that support division.\nThe mathematical structure this class is based on is sometimes also called\na *Euclidean domain*.\n\nInstances must satisfy the following laws in addition to the `Ring`\nlaws:\n\n- Integral domain: `one /= zero`, and if `a` and `b` are both nonzero then\n  so is their product `a * b`\n- Euclidean function `degree`:\n  - Nonnegativity: For all nonzero `a`, `degree a >= 0`\n  - Quotient/remainder: For all `a` and `b`, where `b` is nonzero,\n    let `q = a / b` and ``r = a `mod` b``; then `a = q*b + r`, and also\n    either `r = zero` or `degree r < degree b`\n- Submultiplicative euclidean function:\n  - For all nonzero `a` and `b`, `degree a <= degree (a * b)`\n\nThe behaviour of division by `zero` is unconstrained by these laws,\nmeaning that individual instances are free to choose how to behave in this\ncase. Similarly, there are no restrictions on what the result of\n`degree zero` is; it doesn't make sense to ask for `degree zero` in the\nsame way that it doesn't make sense to divide by `zero`, so again,\nindividual instances may choose how to handle this case.\n\nFor any `EuclideanRing` which is also a `Field`, one valid choice\nfor `degree` is simply `const 1`. In fact, unless there's a specific\nreason not to, `Field` types should normally use this definition of\n`degree`.\n\nThe `EuclideanRing Int` instance is one of the most commonly used\n`EuclideanRing` instances and deserves a little more discussion. In\nparticular, there are a few different sensible law-abiding implementations\nto choose from, with slightly different behaviour in the presence of\nnegative dividends or divisors. The most common definitions are \"truncating\"\ndivision, where the result of `a / b` is rounded towards 0, and \"Knuthian\"\nor \"flooring\" division, where the result of `a / b` is rounded towards\nnegative infinity. A slightly less common, but arguably more useful, option\nis \"Euclidean\" division, which is defined so as to ensure that ``a `mod` b``\nis always nonnegative. With Euclidean division, `a / b` rounds towards\nnegative infinity if the divisor is positive, and towards positive infinity\nif the divisor is negative. Note that all three definitions are identical if\nwe restrict our attention to nonnegative dividends and divisors.\n\nIn versions 1.x, 2.x, and 3.x of the Prelude, the `EuclideanRing Int`\ninstance used truncating division. As of 4.x, the `EuclideanRing Int`\ninstance uses Euclidean division. Additional functions `quot` and `rem` are\nsupplied if truncating division is desired.\n","title":"EuclideanRing","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[66,21]}},{"kind":null,"children":[],"comments":null,"title":"(/)","info":{"declType":"alias","alias":[["Data","EuclideanRing"],{"Right":{"Left":{"Ident":"div"}}}],"fixity":{"associativity":"infixl","precedence":7}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[68,18]}},{"kind":null,"children":[],"comments":"The *greatest common divisor* of two values.\n","title":"gcd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","EuclideanRing"],"EuclideanRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]}},"sourceSpan":{"start":[87,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[87,56]}},{"kind":null,"children":[],"comments":"The *least common multiple* of two values.\n","title":"lcm","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","EuclideanRing"],"EuclideanRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]}},"sourceSpan":{"start":[94,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[94,56]}}]}+{"reExports":[],"name":"Data.EuclideanRing","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"degree","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[68,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[68,21]}},{"comments":null,"title":"div","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[69,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[69,21]}},{"comments":null,"title":"mod","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[70,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[70,21]}},{"comments":null,"title":"euclideanRingInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","EuclideanRing"],"EuclideanRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[74,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[77,15]}},{"comments":null,"title":"euclideanRingNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","EuclideanRing"],"EuclideanRing"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[79,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[82,16]}}],"comments":"The `EuclideanRing` class is for commutative rings that support division.\nThe mathematical structure this class is based on is sometimes also called\na *Euclidean domain*.\n\nInstances must satisfy the following laws in addition to the `Ring`\nlaws:\n\n- Integral domain: `one /= zero`, and if `a` and `b` are both nonzero then\n  so is their product `a * b`\n- Euclidean function `degree`:\n  - Nonnegativity: For all nonzero `a`, `degree a >= 0`\n  - Quotient/remainder: For all `a` and `b`, where `b` is nonzero,\n    let `q = a / b` and ``r = a `mod` b``; then `a = q*b + r`, and also\n    either `r = zero` or `degree r < degree b`\n- Submultiplicative euclidean function:\n  - For all nonzero `a` and `b`, `degree a <= degree (a * b)`\n\nThe behaviour of division by `zero` is unconstrained by these laws,\nmeaning that individual instances are free to choose how to behave in this\ncase. Similarly, there are no restrictions on what the result of\n`degree zero` is; it doesn't make sense to ask for `degree zero` in the\nsame way that it doesn't make sense to divide by `zero`, so again,\nindividual instances may choose how to handle this case.\n\nFor any `EuclideanRing` which is also a `Field`, one valid choice\nfor `degree` is simply `const 1`. In fact, unless there's a specific\nreason not to, `Field` types should normally use this definition of\n`degree`.\n\nThe `EuclideanRing Int` instance is one of the most commonly used\n`EuclideanRing` instances and deserves a little more discussion. In\nparticular, there are a few different sensible law-abiding implementations\nto choose from, with slightly different behaviour in the presence of\nnegative dividends or divisors. The most common definitions are \"truncating\"\ndivision, where the result of `a / b` is rounded towards 0, and \"Knuthian\"\nor \"flooring\" division, where the result of `a / b` is rounded towards\nnegative infinity. A slightly less common, but arguably more useful, option\nis \"Euclidean\" division, which is defined so as to ensure that ``a `mod` b``\nis always nonnegative. With Euclidean division, `a / b` rounds towards\nnegative infinity if the divisor is positive, and towards positive infinity\nif the divisor is negative. Note that all three definitions are identical if\nwe restrict our attention to nonnegative dividends and divisors.\n\nIn versions 1.x, 2.x, and 3.x of the Prelude, the `EuclideanRing Int`\ninstance used truncating division. As of 4.x, the `EuclideanRing Int`\ninstance uses Euclidean division. Additional functions `quot` and `rem` are\nsupplied if truncating division is desired.\n","title":"EuclideanRing","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","CommutativeRing"],"CommutativeRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[67,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[70,21]}},{"kind":null,"children":[],"comments":null,"title":"(/)","info":{"declType":"alias","alias":[["Data","EuclideanRing"],{"Right":{"Left":{"Ident":"div"}}}],"fixity":{"associativity":"infixl","precedence":7}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[72,18]}},{"kind":null,"children":[],"comments":"The *greatest common divisor* of two values.\n","title":"gcd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","EuclideanRing"],"EuclideanRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]}},"sourceSpan":{"start":[91,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[91,56]}},{"kind":null,"children":[],"comments":"The *least common multiple* of two values.\n","title":"lcm","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","EuclideanRing"],"EuclideanRing"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]}},"sourceSpan":{"start":[97,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs","end":[97,56]}}]}
tests/purs/publish/basic-example/output/Data.Function/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Function","comments":null,"declarations":[{"kind":null,"children":[],"comments":"Flips the order of the arguments to a function of two arguments.\n\n```purescript\nflip const 1 2 = const 2 1 = 2\n```\n","title":"flip","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[21,51]}},{"kind":null,"children":[],"comments":"Returns its first argument and ignores its second.\n\n```purescript\nconst 1 \"hello\" = 1\n```\n\nIt can also be thought of as creating a function that ignores its argument:\n\n```purescript\nconst 1 = \\_ -> 1\n```\n","title":"const","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[35,33]}},{"kind":null,"children":[],"comments":"Applies a function to an argument. This is primarily used as the operator\n`($)` which allows parentheses to be omitted in some cases, or as a\nnatural way to apply a chain of composed functions to a value.\n","title":"apply","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},null]},null]}},"sourceSpan":{"start":[41,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[41,40]}},{"kind":null,"children":[],"comments":"Applies a function to an argument: the reverse of `(#)`.\n\n```purescript\nlength $ groupBy productCategory $ filter isInStock $ products\n```\n\nis equivalent to:\n\n```purescript\nlength (groupBy productCategory (filter isInStock products))\n```\n\nOr another alternative equivalent, applying chain of composed functions to\na value:\n\n```purescript\nlength <<< groupBy productCategory <<< filter isInStock $ products\n```\n","title":"($)","info":{"declType":"alias","alias":[["Data","Function"],{"Right":{"Left":{"Ident":"apply"}}}],"fixity":{"associativity":"infixr","precedence":0}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[62,20]}},{"kind":null,"children":[],"comments":"Applies an argument to a function. This is primarily used as the `(#)`\noperator, which allows parentheses to be omitted in some cases, or as a\nnatural way to apply a value to a chain of composed functions.\n","title":"applyFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},null]},null]}},"sourceSpan":{"start":[67,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[67,47]}},{"kind":null,"children":[],"comments":"Applies an argument to a function: the reverse of `($)`.\n\n```purescript\nproducts # filter isInStock # groupBy productCategory # length\n```\n\nis equivalent to:\n\n```purescript\nlength (groupBy productCategory (filter isInStock products))\n```\n\nOr another alternative equivalent, applying a value to a chain of composed\nfunctions:\n\n```purescript\nproducts # filter isInStock >>> groupBy productCategory >>> length\n```\n","title":"(#)","info":{"declType":"alias","alias":[["Data","Function"],{"Right":{"Left":{"Ident":"applyFlipped"}}}],"fixity":{"associativity":"infixl","precedence":1}},"sourceSpan":{"start":[88,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[88,27]}},{"kind":null,"children":[],"comments":"`applyN f n` applies the function `f` to its argument `n` times.\n\nIf n is less than or equal to 0, the function is not applied.\n\n```purescript\napplyN (_ + 1) 10 0 == 10\n```\n","title":"applyN","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[97,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[97,46]}},{"kind":null,"children":[],"comments":"The `on` function is used to change the domain of a binary operator.\n\nFor example, we can create a function which compares two records based on the values of their `x` properties:\n\n```purescript\ncompareX :: forall r. { x :: Number | r } -> { x :: Number | r } -> Ordering\ncompareX = compare `on` _.x\n```\n","title":"on","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[112,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[112,61]}}]}+{"reExports":[],"name":"Data.Function","comments":null,"declarations":[{"kind":null,"children":[],"comments":"Given a function that takes two arguments, applies the arguments\nto the function in a swapped order.\n\n```purescript\nflip append \"1\" \"2\" == append \"2\" \"1\" == \"21\"\n\nconst 1 \"two\" == 1\n\nflip const 1 \"two\" == const \"two\" 1 == \"two\"\n```\n","title":"flip","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[28,51]}},{"kind":null,"children":[],"comments":"Returns its first argument and ignores its second.\n\n```purescript\nconst 1 \"hello\" = 1\n```\n\nIt can also be thought of as creating a function that ignores its argument:\n\n```purescript\nconst 1 = \\_ -> 1\n```\n","title":"const","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[42,33]}},{"kind":null,"children":[],"comments":"Applies a function to an argument. This is primarily used as the operator\n`($)` which allows parentheses to be omitted in some cases, or as a\nnatural way to apply a chain of composed functions to a value.\n","title":"apply","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},null]},null]}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[48,40]}},{"kind":null,"children":[],"comments":"Applies a function to an argument: the reverse of `(#)`.\n\n```purescript\nlength $ groupBy productCategory $ filter isInStock $ products\n```\n\nis equivalent to:\n\n```purescript\nlength (groupBy productCategory (filter isInStock products))\n```\n\nOr another alternative equivalent, applying chain of composed functions to\na value:\n\n```purescript\nlength <<< groupBy productCategory <<< filter isInStock $ products\n```\n","title":"($)","info":{"declType":"alias","alias":[["Data","Function"],{"Right":{"Left":{"Ident":"apply"}}}],"fixity":{"associativity":"infixr","precedence":0}},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[69,20]}},{"kind":null,"children":[],"comments":"Applies an argument to a function. This is primarily used as the `(#)`\noperator, which allows parentheses to be omitted in some cases, or as a\nnatural way to apply a value to a chain of composed functions.\n","title":"applyFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},null]},null]}},"sourceSpan":{"start":[74,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[74,47]}},{"kind":null,"children":[],"comments":"Applies an argument to a function: the reverse of `($)`.\n\n```purescript\nproducts # filter isInStock # groupBy productCategory # length\n```\n\nis equivalent to:\n\n```purescript\nlength (groupBy productCategory (filter isInStock products))\n```\n\nOr another alternative equivalent, applying a value to a chain of composed\nfunctions:\n\n```purescript\nproducts # filter isInStock >>> groupBy productCategory >>> length\n```\n","title":"(#)","info":{"declType":"alias","alias":[["Data","Function"],{"Right":{"Left":{"Ident":"applyFlipped"}}}],"fixity":{"associativity":"infixl","precedence":1}},"sourceSpan":{"start":[95,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[95,27]}},{"kind":null,"children":[],"comments":"`applyN f n` applies the function `f` to its argument `n` times.\n\nIf n is less than or equal to 0, the function is not applied.\n\n```purescript\napplyN (_ + 1) 10 0 == 10\n```\n","title":"applyN","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[104,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[104,46]}},{"kind":null,"children":[],"comments":"The `on` function is used to change the domain of a binary operator.\n\nFor example, we can create a function which compares two records based on the values of their `x` properties:\n\n```purescript\ncompareX :: forall r. { x :: Number | r } -> { x :: Number | r } -> Ordering\ncompareX = compare `on` _.x\n```\n","title":"on","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ForAll","contents":["c",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"c"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[119,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Function.purs","end":[119,61]}}]}
tests/purs/publish/basic-example/output/Data.Functor/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Functor","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"map","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[26,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[26,44]}},{"comments":null,"title":"functorFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Functor"],"Functor"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[41,16]}},{"comments":null,"title":"functorArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Functor"],"Functor"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[44,17]}},{"comments":null,"title":"functorProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Functor"],"Functor"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[47,18]}}],"comments":"A `Functor` is a type constructor which supports a mapping operation\n`map`.\n\n`map` can be used to turn functions `a -> b` into functions\n`f a -> f b` whose argument and return types use the type constructor `f`\nto represent some computational context.\n\nInstances must satisfy the following laws:\n\n- Identity: `map identity = identity`\n- Composition: `map (f <<< g) = map f <<< map g`\n","title":"Functor","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[26,44]}},{"kind":null,"children":[],"comments":null,"title":"(<$>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"map"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[28,20]}},{"kind":null,"children":[],"comments":"`mapFlipped` is `map` with its arguments reversed. For example:\n\n```purescript\n[1, 2, 3] <#> \\n -> n * n\n```\n","title":"mapFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[35,64]}},{"kind":null,"children":[],"comments":null,"title":"(<#>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"mapFlipped"}}}],"fixity":{"associativity":"infixl","precedence":1}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[38,27]}},{"kind":null,"children":[],"comments":"The `void` function is used to ignore the type wrapped by a\n[`Functor`](#functor), replacing it with `Unit` and keeping only the type\ninformation provided by the type constructor itself.\n\n`void` is often useful when using `do` notation to change the return type\nof a monadic computation:\n\n```purescript\nmain = forE 1 10 \\n -> void do\n  print n\n  print (n * n)\n```\n","title":"void","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]},null]}},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[63,47]}},{"kind":null,"children":[],"comments":"Ignore the return value of a computation, using the specified return value\ninstead.\n","title":"voidRight","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[68,56]}},{"kind":null,"children":[],"comments":null,"title":"(<$)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"voidRight"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[71,25]}},{"kind":null,"children":[],"comments":"A version of `voidRight` with its arguments flipped.\n","title":"voidLeft","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[74,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[74,55]}},{"kind":null,"children":[],"comments":null,"title":"($>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"voidLeft"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[77,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[77,24]}},{"kind":null,"children":[],"comments":"Apply a value in a computational context to a value in no context.\n\nGeneralizes `flip`.\n\n```purescript\nlongEnough :: String -> Bool\nhasSymbol :: String -> Bool\nhasDigit :: String -> Bool\npassword :: String\n\nvalidate :: String -> Array Bool\nvalidate = flap [longEnough, hasSymbol, hasDigit]\n```\n\n```purescript\nflap (-) 3 4 == 1\nthreeve <$> Just 1 <@> 'a' <*> Just true == Just (threeve 1 'a' true)\n```\n","title":"flap","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[97,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[97,58]}},{"kind":null,"children":[],"comments":null,"title":"(<@>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"flap"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[100,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[100,21]}}]}+{"reExports":[],"name":"Data.Functor","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"map","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]},null]},null]}},"sourceSpan":{"start":[32,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[32,44]}},{"comments":null,"title":"functorFn","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Functor"],"Functor"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[47,16]}},{"comments":null,"title":"functorArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Functor"],"Functor"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[50,17]}},{"comments":null,"title":"functorProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Functor"],"Functor"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[53,18]}}],"comments":"A `Functor` is a type constructor which supports a mapping operation\n`map`.\n\n`map` can be used to turn functions `a -> b` into functions\n`f a -> f b` whose argument and return types use the type constructor `f`\nto represent some computational context.\n\nInstances must satisfy the following laws:\n\n- Identity: `map identity = identity`\n- Composition: `map (f <<< g) = map f <<< map g`\n","title":"Functor","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[32,44]}},{"kind":null,"children":[],"comments":null,"title":"(<$>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"map"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[34,20]}},{"kind":null,"children":[],"comments":"`mapFlipped` is `map` with its arguments reversed. For example:\n\n```purescript\n[1, 2, 3] <#> \\n -> n * n\n```\n","title":"mapFlipped","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[41,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[41,64]}},{"kind":null,"children":[],"comments":null,"title":"(<#>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"mapFlipped"}}}],"fixity":{"associativity":"infixl","precedence":1}},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[44,27]}},{"kind":null,"children":[],"comments":"The `void` function is used to ignore the type wrapped by a\n[`Functor`](#functor), replacing it with `Unit` and keeping only the type\ninformation provided by the type constructor itself.\n\n`void` is often useful when using `do` notation to change the return type\nof a monadic computation:\n\n```purescript\nmain = forE 1 10 \\n -> void do\n  print n\n  print (n * n)\n```\n","title":"void","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]},null]}},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[69,47]}},{"kind":null,"children":[],"comments":"Ignore the return value of a computation, using the specified return value\ninstead.\n","title":"voidRight","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[74,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[74,56]}},{"kind":null,"children":[],"comments":null,"title":"(<$)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"voidRight"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[77,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[77,25]}},{"kind":null,"children":[],"comments":"A version of `voidRight` with its arguments flipped.\n","title":"voidLeft","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[80,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[80,55]}},{"kind":null,"children":[],"comments":null,"title":"($>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"voidLeft"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[83,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[83,24]}},{"kind":null,"children":[],"comments":"Apply a value in a computational context to a value in no context.\n\nGeneralizes `flip`.\n\n```purescript\nlongEnough :: String -> Bool\nhasSymbol :: String -> Bool\nhasDigit :: String -> Bool\npassword :: String\n\nvalidate :: String -> Array Bool\nvalidate = flap [longEnough, hasSymbol, hasDigit]\n```\n\n```purescript\nflap (-) 3 4 == 1\nthreeve <$> Just 1 <@> 'a' <*> Just true == Just (threeve 1 'a' true)\n```\n","title":"flap","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Functor"],"Functor"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[103,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[103,58]}},{"kind":null,"children":[],"comments":null,"title":"(<@>)","info":{"declType":"alias","alias":[["Data","Functor"],{"Right":{"Left":{"Ident":"flap"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[106,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs","end":[106,21]}}]}
tests/purs/publish/basic-example/output/Data.Generic.Rep/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Generic.Rep","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"to","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"rep"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[57,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[57,17]}},{"comments":null,"title":"from","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"rep"}]}},"sourceSpan":{"start":[58,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[58,19]}}],"comments":"The `Generic` class asserts the existence of a type function from types\nto their representations using the type constructors defined in this module.\n","title":"Generic","info":{"fundeps":[[["a"],["rep"]]],"arguments":[["a",null],["rep",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[56,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[58,19]}},{"kind":null,"children":[],"comments":null,"title":"repOf","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rep"}]}]}]},null]},null]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[60,61]}},{"kind":null,"children":[],"comments":"A representation for types with no constructors.\n","title":"NoConstructors","info":{"roles":[],"declType":"data","dataDeclType":"data","typeArguments":[]},"sourceSpan":{"start":[20,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[20,20]}},{"kind":null,"children":[{"comments":null,"title":"NoArguments","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[23,18],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[23,31]}},{"comments":null,"title":"showNoArguments","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoArguments"]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[26,25]}}],"comments":"A representation for constructors with no arguments.\n","title":"NoArguments","info":{"roles":[],"declType":"data","dataDeclType":"data","typeArguments":[]},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[23,31]}},{"kind":null,"children":[{"comments":null,"title":"Inl","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"declType":"dataConstructor"},"sourceSpan":{"start":[29,14],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[29,19]}},{"comments":null,"title":"Inr","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"declType":"dataConstructor"},"sourceSpan":{"start":[29,22],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[29,27]}},{"comments":null,"title":"showSum","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Sum"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[33,42]}}],"comments":"A representation for types with multiple constructors.\n","title":"Sum","info":{"roles":["Representational","Representational"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null],["b",null]]},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[29,29]}},{"kind":null,"children":[{"comments":null,"title":"Product","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"declType":"dataConstructor"},"sourceSpan":{"start":[36,18],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[36,27]}},{"comments":null,"title":"showProduct","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Product"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[39,69]}}],"comments":"A representation for constructors with multiple fields.\n","title":"Product","info":{"roles":["Representational","Representational"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null],["b",null]]},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[36,31]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},"keyword":"newtype"},"children":[{"comments":null,"title":"Constructor","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"declType":"dataConstructor"},"sourceSpan":{"start":[43,40],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[43,55]}},{"comments":null,"title":"showConstructor","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"name"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Constructor"]},{"annotation":[],"tag":"TypeVar","contents":"name"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[46,112]}}],"comments":"A representation for constructors which includes the data constructor name\nas a type-level string.\n","title":"Constructor","info":{"roles":["Phantom","Representational"],"declType":"data","dataDeclType":"newtype","typeArguments":[["name",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}],["a",null]]},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[43,55]}},{"kind":null,"children":[{"comments":null,"title":"Argument","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"declType":"dataConstructor"},"sourceSpan":{"start":[49,20],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[49,32]}},{"comments":null,"title":"showArgument","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Argument"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[52,52]}}],"comments":"A representation for an argument in a data constructor.\n","title":"Argument","info":{"roles":["Representational"],"declType":"data","dataDeclType":"newtype","typeArguments":[["a",null]]},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[49,32]}}]}+{"reExports":[],"name":"Data.Generic.Rep","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"to","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"rep"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[58,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[58,17]}},{"comments":null,"title":"from","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"rep"}]}},"sourceSpan":{"start":[59,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[59,19]}}],"comments":"The `Generic` class asserts the existence of a type function from types\nto their representations using the type constructors defined in this module.\n","title":"Generic","info":{"fundeps":[[["a"],["rep"]]],"arguments":[["a",null],["rep",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[59,19]}},{"kind":null,"children":[],"comments":null,"title":"repOf","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rep"}]}]}]},null]},null]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[61,61]}},{"kind":null,"children":[],"comments":"A representation for types with no constructors.\n","title":"NoConstructors","info":{"roles":[],"declType":"data","dataDeclType":"newtype","typeArguments":[]},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[21,45]}},{"kind":null,"children":[{"comments":null,"title":"NoArguments","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[24,18],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[24,31]}},{"comments":null,"title":"showNoArguments","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoArguments"]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[27,25]}}],"comments":"A representation for constructors with no arguments.\n","title":"NoArguments","info":{"roles":[],"declType":"data","dataDeclType":"data","typeArguments":[]},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[24,31]}},{"kind":null,"children":[{"comments":null,"title":"Inl","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"declType":"dataConstructor"},"sourceSpan":{"start":[30,14],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[30,19]}},{"comments":null,"title":"Inr","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"declType":"dataConstructor"},"sourceSpan":{"start":[30,22],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[30,27]}},{"comments":null,"title":"showSum","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Sum"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[32,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[34,42]}}],"comments":"A representation for types with multiple constructors.\n","title":"Sum","info":{"roles":["Representational","Representational"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null],["b",null]]},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[30,29]}},{"kind":null,"children":[{"comments":null,"title":"Product","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"declType":"dataConstructor"},"sourceSpan":{"start":[37,18],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[37,27]}},{"comments":null,"title":"showProduct","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Product"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[40,69]}}],"comments":"A representation for constructors with multiple fields.\n","title":"Product","info":{"roles":["Representational","Representational"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null],["b",null]]},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[37,31]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},"keyword":"newtype"},"children":[{"comments":null,"title":"Constructor","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"declType":"dataConstructor"},"sourceSpan":{"start":[44,40],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[44,55]}},{"comments":null,"title":"showConstructor","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"name"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Constructor"]},{"annotation":[],"tag":"TypeVar","contents":"name"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[47,112]}}],"comments":"A representation for constructors which includes the data constructor name\nas a type-level string.\n","title":"Constructor","info":{"roles":["Phantom","Representational"],"declType":"data","dataDeclType":"newtype","typeArguments":[["name",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}],["a",null]]},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[44,55]}},{"kind":null,"children":[{"comments":null,"title":"Argument","info":{"arguments":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"declType":"dataConstructor"},"sourceSpan":{"start":[50,20],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[50,32]}},{"comments":null,"title":"showArgument","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Argument"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[53,52]}}],"comments":"A representation for an argument in a data constructor.\n","title":"Argument","info":{"roles":["Representational"],"declType":"data","dataDeclType":"newtype","typeArguments":[["a",null]]},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs","end":[50,32]}}]}
tests/purs/publish/basic-example/output/Data.HeytingAlgebra/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.HeytingAlgebra","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"ff","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[39,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[39,10]}},{"comments":null,"title":"tt","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[40,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[40,10]}},{"comments":null,"title":"implies","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[41,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[41,25]}},{"comments":null,"title":"conj","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[42,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[42,22]}},{"comments":null,"title":"disj","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[43,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[43,22]}},{"comments":null,"title":"not","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[44,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[44,16]}},{"comments":null,"title":"heytingAlgebraBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[55,16]}},{"comments":null,"title":"heytingAlgebraUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[63,15]}},{"comments":null,"title":"heytingAlgebraFunction","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[71,22]}},{"comments":null,"title":"heytingAlgebraProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[73,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[79,13]}},{"comments":null,"title":"heytingAlgebraProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[81,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[87,14]}},{"comments":null,"title":"heytingAlgebraProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[89,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[95,14]}},{"comments":null,"title":"heytingAlgebraRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[97,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[103,41]}}],"comments":"The `HeytingAlgebra` type class represents types that are bounded lattices with\nan implication operator such that the following laws hold:\n\n- Associativity:\n  - `a || (b || c) = (a || b) || c`\n  - `a && (b && c) = (a && b) && c`\n- Commutativity:\n  - `a || b = b || a`\n  - `a && b = b && a`\n- Absorption:\n  - `a || (a && b) = a`\n  - `a && (a || b) = a`\n- Idempotent:\n  - `a || a = a`\n  - `a && a = a`\n- Identity:\n  - `a || ff = a`\n  - `a && tt = a`\n- Implication:\n  - ``a `implies` a = tt``\n  - ``a && (a `implies` b) = a && b``\n  - ``b && (a `implies` b) = b``\n  - ``a `implies` (b && c) = (a `implies` b) && (a `implies` c)``\n- Complemented:\n  - ``not a = a `implies` ff``\n","title":"HeytingAlgebra","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[44,16]}},{"kind":null,"children":[],"comments":null,"title":"(&&)","info":{"declType":"alias","alias":[["Data","HeytingAlgebra"],{"Right":{"Left":{"Ident":"conj"}}}],"fixity":{"associativity":"infixr","precedence":3}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[46,20]}},{"kind":null,"children":[],"comments":null,"title":"(||)","info":{"declType":"alias","alias":[["Data","HeytingAlgebra"],{"Right":{"Left":{"Ident":"disj"}}}],"fixity":{"associativity":"infixr","precedence":2}},"sourceSpan":{"start":[47,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[47,20]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"ffRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"ForAll","contents":["rproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rproxy"},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]},null]}},"sourceSpan":{"start":[113,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[113,84]}},{"comments":null,"title":"ttRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"ForAll","contents":["rproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rproxy"},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]},null]}},"sourceSpan":{"start":[114,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[114,84]}},{"comments":null,"title":"impliesRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[115,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[115,96]}},{"comments":null,"title":"disjRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[116,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[116,93]}},{"comments":null,"title":"conjRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[117,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[117,93]}},{"comments":null,"title":"notRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]}},"sourceSpan":{"start":[118,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[118,78]}},{"comments":null,"title":"heytingAlgebraRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[120,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[126,20]}},{"comments":null,"title":"heytingAlgebraRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[128,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[174,55]}}],"comments":"A class for records where all fields have `HeytingAlgebra` instances, used\nto implement the `HeytingAlgebra` instance for records.\n","title":"HeytingAlgebraRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[112,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[118,78]}}]}+{"reExports":[],"name":"Data.HeytingAlgebra","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"ff","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[53,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[53,10]}},{"comments":null,"title":"tt","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[54,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[54,10]}},{"comments":null,"title":"implies","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[55,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[55,25]}},{"comments":null,"title":"conj","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[56,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[56,22]}},{"comments":null,"title":"disj","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[57,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[57,22]}},{"comments":null,"title":"not","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[58,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[58,16]}},{"comments":null,"title":"heytingAlgebraBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[69,16]}},{"comments":null,"title":"heytingAlgebraUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[77,15]}},{"comments":null,"title":"heytingAlgebraFunction","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[79,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[85,22]}},{"comments":null,"title":"heytingAlgebraProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[87,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[93,13]}},{"comments":null,"title":"heytingAlgebraRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebra"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[95,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[101,40]}}],"comments":"The `HeytingAlgebra` type class represents types that are bounded lattices with\nan implication operator such that the following laws hold:\n\n- Associativity:\n  - `a || (b || c) = (a || b) || c`\n  - `a && (b && c) = (a && b) && c`\n- Commutativity:\n  - `a || b = b || a`\n  - `a && b = b && a`\n- Absorption:\n  - `a || (a && b) = a`\n  - `a && (a || b) = a`\n- Idempotent:\n  - `a || a = a`\n  - `a && a = a`\n- Identity:\n  - `a || ff = a`\n  - `a && tt = a`\n- Implication:\n  - ``a `implies` a = tt``\n  - ``a && (a `implies` b) = a && b``\n  - ``b && (a `implies` b) = b``\n  - ``a `implies` (b && c) = (a `implies` b) && (a `implies` c)``\n- Complemented:\n  - ``not a = a `implies` ff``\n","title":"HeytingAlgebra","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[58,16]}},{"kind":null,"children":[],"comments":null,"title":"(&&)","info":{"declType":"alias","alias":[["Data","HeytingAlgebra"],{"Right":{"Left":{"Ident":"conj"}}}],"fixity":{"associativity":"infixr","precedence":3}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[60,20]}},{"kind":null,"children":[],"comments":null,"title":"(||)","info":{"declType":"alias","alias":[["Data","HeytingAlgebra"],{"Right":{"Left":{"Ident":"disj"}}}],"fixity":{"associativity":"infixr","precedence":2}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[61,20]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"ffRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[111,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[111,58]}},{"comments":null,"title":"ttRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[112,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[112,58]}},{"comments":null,"title":"impliesRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[113,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[113,78]}},{"comments":null,"title":"disjRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[114,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[114,75]}},{"comments":null,"title":"conjRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[115,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[115,75]}},{"comments":null,"title":"notRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[116,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[116,60]}},{"comments":null,"title":"heytingAlgebraRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[118,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[124,20]}},{"comments":null,"title":"heytingAlgebraRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","HeytingAlgebra"],"HeytingAlgebra"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","HeytingAlgebra"],"HeytingAlgebraRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[126,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[171,53]}}],"comments":"A class for records where all fields have `HeytingAlgebra` instances, used\nto implement the `HeytingAlgebra` instance for records.\n","title":"HeytingAlgebraRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[110,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs","end":[116,60]}}]}
tests/purs/publish/basic-example/output/Data.Monoid/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Monoid","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"mempty","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"m"}},"sourceSpan":{"start":[45,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[45,14]}},{"comments":null,"title":"monoidUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[47,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[48,16]}},{"comments":null,"title":"monoidOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[51,14]}},{"comments":null,"title":"monoidFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[54,20]}},{"comments":null,"title":"monoidString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[56,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[57,14]}},{"comments":null,"title":"monoidArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[60,14]}},{"comments":null,"title":"monoidRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"MonoidRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[63,46]}}],"comments":"A `Monoid` is a `Semigroup` with a value `mempty`, which is both a\nleft and right unit for the associative operation `<>`:\n\n- Left unit: `(mempty <> x) = x`\n- Right unit: `(x <> mempty) = x`\n\n`Monoid`s are commonly used as the result of fold operations, where\n`<>` is used to combine individual results, and `mempty` gives the result\nof folding an empty collection of elements.\n\n### Newtypes for Monoid\n\nSome types (e.g. `Int`, `Boolean`) can implement multiple law-abiding\ninstances for `Monoid`. Let's use `Int` as an example\n1. `<>` could be `+` and `mempty` could be `0`\n2. `<>` could be `*` and `mempty` could be `1`.\n\nTo clarify these ambiguous situations, one should use the newtypes\ndefined in `Data.Monoid.<NewtypeName>` modules.\n\nIn the above ambiguous situation, we could use `Additive`\nfor the first situation or `Multiplicative` for the second one.\n","title":"Monoid","info":{"fundeps":[],"arguments":[["m",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"Semigroup"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[45,14]}},{"kind":null,"children":[],"comments":"Append a value to itself a certain number of times. For the\n`Multiplicative` type, and for a non-negative power, this is the same as\nnormal number exponentiation.\n\nIf the second argument is negative this function will return `mempty`\n(*unlike* normal number exponentiation). The `Monoid` constraint alone\nis not enough to write a `power` function with the property that `power x\nn` cancels with `power x (-n)`, i.e. `power x n <> power x (-n) = mempty`.\nFor that, we would additionally need the ability to invert elements, i.e.\na Group.\n\n```purescript\npower [1,2] 3    == [1,2,1,2,1,2]\npower [1,2] 1    == [1,2]\npower [1,2] 0    == []\npower [1,2] (-3) == []\n```\n\n","title":"power","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"m"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]},{"annotation":[],"tag":"TypeVar","contents":"m"}]}]}]},null]}},"sourceSpan":{"start":[83,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[83,45]}},{"kind":null,"children":[],"comments":"Allow or \"truncate\" a Monoid to its `mempty` value based on a condition.\n","title":"guard","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"m"}]},{"annotation":[],"tag":"TypeVar","contents":"m"}]}]}]},null]}},"sourceSpan":{"start":[94,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[94,49]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"memptyRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]},null]}},"sourceSpan":{"start":[102,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[102,67]}},{"comments":null,"title":"monoidRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"MonoidRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[104,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[105,22]}},{"comments":null,"title":"monoidRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"MonoidRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"MonoidRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[107,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[119,55]}}],"comments":"A class for records where all fields have `Monoid` instances, used to\nimplement the `Monoid` instance for records.\n","title":"MonoidRecord","info":{"fundeps":[[["rowlist"],["row","subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"SemigroupRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[101,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[102,67]}}]}+{"reExports":[],"name":"Data.Monoid","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"mempty","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"m"}},"sourceSpan":{"start":[47,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[47,14]}},{"comments":null,"title":"monoidUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[50,16]}},{"comments":null,"title":"monoidOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[53,14]}},{"comments":null,"title":"monoidFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[56,20]}},{"comments":null,"title":"monoidString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[59,14]}},{"comments":null,"title":"monoidArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[62,14]}},{"comments":null,"title":"monoidRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"MonoidRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"Monoid"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[64,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[65,46]}}],"comments":"A `Monoid` is a `Semigroup` with a value `mempty`, which is both a\nleft and right unit for the associative operation `<>`:\n\n- Left unit: `(mempty <> x) = x`\n- Right unit: `(x <> mempty) = x`\n\n`Monoid`s are commonly used as the result of fold operations, where\n`<>` is used to combine individual results, and `mempty` gives the result\nof folding an empty collection of elements.\n\n### Newtypes for Monoid\n\nSome types (e.g. `Int`, `Boolean`) can implement multiple law-abiding\ninstances for `Monoid`. Let's use `Int` as an example\n1. `<>` could be `+` and `mempty` could be `0`\n2. `<>` could be `*` and `mempty` could be `1`.\n\nTo clarify these ambiguous situations, one should use the newtypes\ndefined in `Data.Monoid.<NewtypeName>` modules.\n\nIn the above ambiguous situation, we could use `Additive`\nfor the first situation or `Multiplicative` for the second one.\n","title":"Monoid","info":{"fundeps":[],"arguments":[["m",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"Semigroup"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[47,14]}},{"kind":null,"children":[],"comments":"Append a value to itself a certain number of times. For the\n`Multiplicative` type, and for a non-negative power, this is the same as\nnormal number exponentiation.\n\nIf the second argument is negative this function will return `mempty`\n(*unlike* normal number exponentiation). The `Monoid` constraint alone\nis not enough to write a `power` function with the property that `power x\nn` cancels with `power x (-n)`, i.e. `power x n <> power x (-n) = mempty`.\nFor that, we would additionally need the ability to invert elements, i.e.\na Group.\n\n```purescript\npower [1,2] 3    == [1,2,1,2,1,2]\npower [1,2] 1    == [1,2]\npower [1,2] 0    == []\npower [1,2] (-3) == []\n```\n\n","title":"power","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"m"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]},{"annotation":[],"tag":"TypeVar","contents":"m"}]}]}]},null]}},"sourceSpan":{"start":[85,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[85,45]}},{"kind":null,"children":[],"comments":"Allow or \"truncate\" a Monoid to its `mempty` value based on a condition.\n","title":"guard","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"m"}]},{"annotation":[],"tag":"TypeVar","contents":"m"}]}]}]},null]}},"sourceSpan":{"start":[96,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[96,49]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"memptyRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}},"sourceSpan":{"start":[104,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[104,49]}},{"comments":null,"title":"monoidRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"MonoidRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[106,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[107,22]}},{"comments":null,"title":"monoidRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"Monoid"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Monoid"],"MonoidRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid"],"MonoidRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[109,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[120,53]}}],"comments":"A class for records where all fields have `Monoid` instances, used to\nimplement the `Monoid` instance for records.\n","title":"MonoidRecord","info":{"fundeps":[[["rowlist"],["row","subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"SemigroupRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[103,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs","end":[104,49]}}]}
tests/purs/publish/basic-example/output/Data.Newtype/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Newtype","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"newtypeAdditive","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Additive"],"Additive"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[38,51]}},{"comments":null,"title":"newtypeMultiplicative","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Multiplicative"],"Multiplicative"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[40,63]}},{"comments":null,"title":"newtypeConj","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Conj"],"Conj"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[42,43]}},{"comments":null,"title":"newtypeDisj","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Disj"],"Disj"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[44,43]}},{"comments":null,"title":"newtypeDual","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Dual"],"Dual"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[46,43]}},{"comments":null,"title":"newtypeEndo","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Endo"],"Endo"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"c"},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[48,51]}},{"comments":null,"title":"newtypeFirst","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup","First"],"First"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[50,45]}},{"comments":null,"title":"newtypeLast","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup","Last"],"Last"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[52,43]}}],"comments":"A type class for `newtype`s to enable convenient wrapping and unwrapping,\nand the use of the other functions in this module.\n\nThe compiler can derive instances of `Newtype` automatically:\n\n``` purescript\nnewtype EmailAddress = EmailAddress String\n\nderive instance newtypeEmailAddress :: Newtype EmailAddress _\n```\n\nNote that deriving for `Newtype` instances requires that the type be\ndefined as `newtype` rather than `data` declaration (even if the `data`\nstructurally fits the rules of a `newtype`), and the use of a wildcard for\nthe wrapped type.\n```\n","title":"Newtype","info":{"fundeps":[[["t"],["a"]]],"arguments":[["t",null],["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[30,44]}},{"kind":null,"children":[],"comments":null,"title":"wrap","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},null]},null]}},"sourceSpan":{"start":[32,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[32,42]}},{"kind":null,"children":[],"comments":null,"title":"unwrap","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[35,44]}},{"kind":null,"children":[],"comments":"Given a constructor for a `Newtype`, this returns the appropriate `unwrap`\nfunction.\n","title":"un","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]},null]}},"sourceSpan":{"start":[56,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[56,52]}},{"kind":null,"children":[],"comments":"This combinator is for when you have a higher order function that you want\nto use in the context of some newtype - `foldMap` being a common example:\n\n``` purescript\nala Additive foldMap [1,2,3,4] -- 10\nala Multiplicative foldMap [1,2,3,4] -- 24\nala Conj foldMap [true, false] -- false\nala Disj foldMap [true, false] -- true\n```\n","title":"ala","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]}]}]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[75,9]}},{"kind":null,"children":[],"comments":"Similar to `ala` but useful for cases where you want to use an additional\nprojection with the higher order function:\n\n``` purescript\nalaF Additive foldMap String.length [\"hello\", \"world\"] -- 10\nalaF Multiplicative foldMap Math.abs [1.0, -2.0, 3.0, -4.0] -- 24.0\n```\n\nThe type admits other possibilities due to the polymorphic `Functor`\nconstraints, but the case described above works because ((->) a) is a\n`Functor`.\n","title":"alaF","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[89,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[98,9]}},{"kind":null,"children":[],"comments":"Lifts a function operate over newtypes. This can be used to lift a\nfunction to manipulate the contents of a single newtype, somewhat like\n`map` does for a `Functor`:\n\n``` purescript\nnewtype Label = Label String\nderive instance newtypeLabel :: Newtype Label _\n\ntoUpperLabel :: Label -> Label\ntoUpperLabel = over Label String.toUpper\n```\n\nBut the result newtype is polymorphic, meaning the result can be returned\nas an alternative newtype:\n\n``` purescript\nnewtype UppercaseLabel = UppercaseLabel String\nderive instance newtypeUppercaseLabel :: Newtype UppercaseLabel _\n\ntoUpperLabel' :: Label -> UppercaseLabel\ntoUpperLabel' = over Label String.toUpper\n```\n","title":"over","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[123,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[130,7]}},{"kind":null,"children":[],"comments":"Much like `over`, but where the lifted function operates on values in a\n`Functor`:\n\n``` purescript\nfindLabel :: String -> Array Label -> Maybe Label\nfindLabel s = overF Label (Foldable.find (_ == s))\n```\n\nThe above example also demonstrates that the functor type is polymorphic\nhere too, the input is an `Array` but the result is a `Maybe`.\n","title":"overF","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[143,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[152,9]}},{"kind":null,"children":[],"comments":"The opposite of `over`: lowers a function that operates on `Newtype`d\nvalues to operate on the wrapped value instead.\n\n``` purescript\nnewtype Degrees = Degrees Number\nderive instance newtypeDegrees :: Newtype Degrees _\n\nnewtype NormalDegrees = NormalDegrees Number\nderive instance newtypeNormalDegrees :: Newtype NormalDegrees _\n\nnormaliseDegrees :: Degrees -> NormalDegrees\nnormaliseDegrees (Degrees deg) = NormalDegrees (deg % 360.0)\n\nasNormalDegrees :: Number -> Number\nasNormalDegrees = under Degrees normaliseDegrees\n```\n\nAs with `over` the `Newtype` is polymorphic, as illustrated in the example\nabove - both `Degrees` and `NormalDegrees` are instances of `Newtype`,\nso even though `normaliseDegrees` changes the result type we can still put\na `Number` in and get a `Number` out via `under`.\n","title":"under","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[176,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[183,7]}},{"kind":null,"children":[],"comments":"Much like `under`, but where the lifted function operates on values in a\n`Functor`:\n\n``` purescript\nnewtype EmailAddress = EmailAddress String\nderive instance newtypeEmailAddress :: Newtype EmailAddress _\n\nisValid :: EmailAddress -> Boolean\nisValid x = false -- imagine a slightly less strict predicate here\n\nfindValidEmailString :: Array String -> Maybe String\nfindValidEmailString = underF EmailAddress (Foldable.find isValid)\n```\n\nThe above example also demonstrates that the functor type is polymorphic\nhere too, the input is an `Array` but the result is a `Maybe`.\n","title":"underF","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[202,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[211,9]}},{"kind":null,"children":[],"comments":"Lifts a binary function to operate over newtypes.\n\n``` purescript\nnewtype Meter = Meter Int\nderive newtype instance newtypeMeter :: Newtype Meter _\nnewtype SquareMeter = SquareMeter Int\nderive newtype instance newtypeSquareMeter :: Newtype SquareMeter _\n\narea :: Meter -> Meter -> SquareMeter\narea = over2 Meter (*)\n```\n\nThe above example also demonstrates that the return type is polymorphic\nhere too.\n","title":"over2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[228,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[236,7]}},{"kind":null,"children":[],"comments":"Much like `over2`, but where the lifted binary function operates on\nvalues in a `Functor`.\n","title":"overF2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[241,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[251,9]}},{"kind":null,"children":[],"comments":"The opposite of `over2`: lowers a binary function that operates on `Newtype`d\nvalues to operate on the wrapped value instead.\n","title":"under2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[256,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[264,7]}},{"kind":null,"children":[],"comments":"Much like `under2`, but where the lifted binary function operates on\nvalues in a `Functor`.\n","title":"underF2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[269,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[279,9]}},{"kind":null,"children":[],"comments":"Similar to the function from the `Traversable` class, but operating within\na newtype instead.\n","title":"traverse","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[284,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[291,9]}},{"kind":null,"children":[],"comments":"Similar to the function from the `Distributive` class, but operating within\na newtype instead.\n","title":"collect","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[296,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[303,7]}}]}+{"reExports":[],"name":"Data.Newtype","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"newtypeAdditive","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Additive"],"Additive"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[37,51]}},{"comments":null,"title":"newtypeMultiplicative","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Multiplicative"],"Multiplicative"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[39,63]}},{"comments":null,"title":"newtypeConj","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Conj"],"Conj"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[41,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[41,43]}},{"comments":null,"title":"newtypeDisj","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Disj"],"Disj"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[43,43]}},{"comments":null,"title":"newtypeDual","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Dual"],"Dual"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[45,43]}},{"comments":null,"title":"newtypeEndo","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Monoid","Endo"],"Endo"]},{"annotation":[],"tag":"TypeVar","contents":"c"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"c"},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[47,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[47,51]}},{"comments":null,"title":"newtypeFirst","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup","First"],"First"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[49,45]}},{"comments":null,"title":"newtypeLast","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Newtype"],"Newtype"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup","Last"],"Last"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[51,43]}}],"comments":"A type class for `newtype`s to enable convenient wrapping and unwrapping,\nand the use of the other functions in this module.\n\nThe compiler can derive instances of `Newtype` automatically:\n\n``` purescript\nnewtype EmailAddress = EmailAddress String\n\nderive instance newtypeEmailAddress :: Newtype EmailAddress _\n```\n\nNote that deriving for `Newtype` instances requires that the type be\ndefined as `newtype` rather than `data` declaration (even if the `data`\nstructurally fits the rules of a `newtype`), and the use of a wildcard for\nthe wrapped type.\n","title":"Newtype","info":{"fundeps":[[["t"],["a"]]],"arguments":[["t",null],["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[29,44]}},{"kind":null,"children":[],"comments":null,"title":"wrap","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},null]},null]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[31,42]}},{"kind":null,"children":[],"comments":null,"title":"unwrap","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[34,44]}},{"kind":null,"children":[],"comments":"Given a constructor for a `Newtype`, this returns the appropriate `unwrap`\nfunction.\n","title":"un","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]},null]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[55,52]}},{"kind":null,"children":[],"comments":"This combinator unwraps the newtype, applies a monomorphic function to the \ncontained value and wraps the result back in the newtype\n","title":"modify","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}]},null]},null]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[60,56]}},{"kind":null,"children":[],"comments":"This combinator is for when you have a higher order function that you want\nto use in the context of some newtype - `foldMap` being a common example:\n\n``` purescript\nala Additive foldMap [1,2,3,4] -- 10\nala Multiplicative foldMap [1,2,3,4] -- 24\nala Conj foldMap [true, false] -- false\nala Disj foldMap [true, false] -- true\n```\n","title":"ala","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"b"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]}]}]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[79,9]}},{"kind":null,"children":[],"comments":"Similar to `ala` but useful for cases where you want to use an additional\nprojection with the higher order function:\n\n``` purescript\nalaF Additive foldMap String.length [\"hello\", \"world\"] -- 10\nalaF Multiplicative foldMap Math.abs [1.0, -2.0, 3.0, -4.0] -- 24.0\n```\n\nThe type admits other possibilities due to the polymorphic `Functor`\nconstraints, but the case described above works because ((->) a) is a\n`Functor`.\n","title":"alaF","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[93,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[102,9]}},{"kind":null,"children":[],"comments":"Lifts a function operate over newtypes. This can be used to lift a\nfunction to manipulate the contents of a single newtype, somewhat like\n`map` does for a `Functor`:\n\n``` purescript\nnewtype Label = Label String\nderive instance newtypeLabel :: Newtype Label _\n\ntoUpperLabel :: Label -> Label\ntoUpperLabel = over Label String.toUpper\n```\n\nBut the result newtype is polymorphic, meaning the result can be returned\nas an alternative newtype:\n\n``` purescript\nnewtype UppercaseLabel = UppercaseLabel String\nderive instance newtypeUppercaseLabel :: Newtype UppercaseLabel _\n\ntoUpperLabel' :: Label -> UppercaseLabel\ntoUpperLabel' = over Label String.toUpper\n```\n","title":"over","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[127,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[134,7]}},{"kind":null,"children":[],"comments":"Much like `over`, but where the lifted function operates on values in a\n`Functor`:\n\n``` purescript\nfindLabel :: String -> Array Label -> Maybe Label\nfindLabel s = overF Label (Foldable.find (_ == s))\n```\n\nThe above example also demonstrates that the functor type is polymorphic\nhere too, the input is an `Array` but the result is a `Maybe`.\n","title":"overF","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[147,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[156,9]}},{"kind":null,"children":[],"comments":"The opposite of `over`: lowers a function that operates on `Newtype`d\nvalues to operate on the wrapped value instead.\n\n``` purescript\nnewtype Degrees = Degrees Number\nderive instance newtypeDegrees :: Newtype Degrees _\n\nnewtype NormalDegrees = NormalDegrees Number\nderive instance newtypeNormalDegrees :: Newtype NormalDegrees _\n\nnormaliseDegrees :: Degrees -> NormalDegrees\nnormaliseDegrees (Degrees deg) = NormalDegrees (deg % 360.0)\n\nasNormalDegrees :: Number -> Number\nasNormalDegrees = under Degrees normaliseDegrees\n```\n\nAs with `over` the `Newtype` is polymorphic, as illustrated in the example\nabove - both `Degrees` and `NormalDegrees` are instances of `Newtype`,\nso even though `normaliseDegrees` changes the result type we can still put\na `Number` in and get a `Number` out via `under`.\n","title":"under","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[180,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[187,7]}},{"kind":null,"children":[],"comments":"Much like `under`, but where the lifted function operates on values in a\n`Functor`:\n\n``` purescript\nnewtype EmailAddress = EmailAddress String\nderive instance newtypeEmailAddress :: Newtype EmailAddress _\n\nisValid :: EmailAddress -> Boolean\nisValid x = false -- imagine a slightly less strict predicate here\n\nfindValidEmailString :: Array String -> Maybe String\nfindValidEmailString = underF EmailAddress (Foldable.find isValid)\n```\n\nThe above example also demonstrates that the functor type is polymorphic\nhere too, the input is an `Array` but the result is a `Maybe`.\n","title":"underF","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[206,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[215,9]}},{"kind":null,"children":[],"comments":"Lifts a binary function to operate over newtypes.\n\n``` purescript\nnewtype Meter = Meter Int\nderive newtype instance newtypeMeter :: Newtype Meter _\nnewtype SquareMeter = SquareMeter Int\nderive newtype instance newtypeSquareMeter :: Newtype SquareMeter _\n\narea :: Meter -> Meter -> SquareMeter\narea = over2 Meter (*)\n```\n\nThe above example also demonstrates that the return type is polymorphic\nhere too.\n","title":"over2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[232,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[240,7]}},{"kind":null,"children":[],"comments":"Much like `over2`, but where the lifted binary function operates on\nvalues in a `Functor`.\n","title":"overF2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[245,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[255,9]}},{"kind":null,"children":[],"comments":"The opposite of `over2`: lowers a binary function that operates on `Newtype`d\nvalues to operate on the wrapped value instead.\n","title":"under2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]},null]},null]},null]},null]}},"sourceSpan":{"start":[260,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[268,7]}},{"kind":null,"children":[],"comments":"Much like `under2`, but where the lifted binary function operates on\nvalues in a `Functor`.\n","title":"underF2","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["g",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["s",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s"},{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"s"}]}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"g"},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}]}]}]}]}]}]}]},null]},null]},null]},null]},null]},null]}},"sourceSpan":{"start":[273,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[283,9]}},{"kind":null,"children":[],"comments":"Similar to the function from the `Traversable` class, but operating within\na newtype instead.\n","title":"traverse","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[288,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[295,9]}},{"kind":null,"children":[],"comments":"Similar to the function from the `Distributive` class, but operating within\na newtype instead.\n","title":"collect","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["f",{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Prim","Coerce"],"Coercible"],"constraintArgs":[{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Newtype"],"Newtype"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"},{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}]}]}]}]},null]},null]},null]}},"sourceSpan":{"start":[300,1],"name":"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs","end":[307,7]}}]}
tests/purs/publish/basic-example/output/Data.Ord/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Ord","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"compare","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}},"sourceSpan":{"start":[38,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[38,32]}},{"comments":null,"title":"ordBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[41,36]}},{"comments":null,"title":"ordInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[44,32]}},{"comments":null,"title":"ordNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[47,35]}},{"comments":null,"title":"ordString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[50,35]}},{"comments":null,"title":"ordChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[53,33]}},{"comments":null,"title":"ordUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[56,19]}},{"comments":null,"title":"ordVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[59,19]}},{"comments":null,"title":"ordProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[62,19]}},{"comments":null,"title":"ordProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[64,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[65,19]}},{"comments":null,"title":"ordProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[67,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[68,19]}},{"comments":null,"title":"ordArray","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[70,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[77,17]}},{"comments":null,"title":"ordOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[121,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[128,21]}},{"comments":null,"title":"ordRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ord"],"OrdRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[249,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[254,48]}}],"comments":"The `Ord` type class represents types which support comparisons with a\n_total order_.\n\n`Ord` instances should satisfy the laws of total orderings:\n\n- Reflexivity: `a <= a`\n- Antisymmetry: if `a <= b` and `b <= a` then `a = b`\n- Transitivity: if `a <= b` and `b <= c` then `a <= c`\n","title":"Ord","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[38,32]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"compare1","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}]},null]}},"sourceSpan":{"start":[221,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[221,56]}},{"comments":null,"title":"ord1Array","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord1"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[223,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[224,21]}}],"comments":"The `Ord1` type class represents totally ordered type constructors.\n","title":"Ord1","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq1"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[220,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[221,56]}},{"kind":null,"children":[],"comments":"Test whether one value is _strictly less than_ another.\n","title":"lessThan","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[131,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[131,49]}},{"kind":null,"children":[],"comments":null,"title":"(<)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"lessThan"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[154,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[154,23]}},{"kind":null,"children":[],"comments":"Test whether one value is _non-strictly less than_ another.\n","title":"lessThanOrEq","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[143,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[143,53]}},{"kind":null,"children":[],"comments":null,"title":"(<=)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"lessThanOrEq"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[155,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[155,28]}},{"kind":null,"children":[],"comments":"Test whether one value is _strictly greater than_ another.\n","title":"greaterThan","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[137,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[137,52]}},{"kind":null,"children":[],"comments":null,"title":"(>)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"greaterThan"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[156,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[156,26]}},{"kind":null,"children":[],"comments":"Test whether one value is _non-strictly greater than_ another.\n","title":"greaterThanOrEq","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[149,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[149,56]}},{"kind":null,"children":[],"comments":null,"title":"(>=)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"greaterThanOrEq"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[157,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[157,31]}},{"kind":null,"children":[],"comments":"Compares two values by mapping them to a type with an `Ord` instance.\n","title":"comparing","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}}]}]},null]},null]}},"sourceSpan":{"start":[160,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[160,67]}},{"kind":null,"children":[],"comments":"Take the minimum of two values. If they are considered equal, the first\nargument is chosen.\n","title":"min","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[165,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[165,38]}},{"kind":null,"children":[],"comments":"Take the maximum of two values. If they are considered equal, the first\nargument is chosen.\n","title":"max","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[174,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[174,38]}},{"kind":null,"children":[],"comments":"Clamp a value between a minimum and a maximum. For example:\n\n``` purescript\nlet f = clamp 0 10\nf (-5) == 0\nf 5    == 5\nf 15   == 10\n```\n","title":"clamp","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]}},"sourceSpan":{"start":[189,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[189,45]}},{"kind":null,"children":[],"comments":"Test whether a value is between a minimum and a maximum (inclusive).\nFor example:\n\n``` purescript\nlet f = between 0 10\nf 0    == true\nf (-5) == false\nf 5    == true\nf 10   == true\nf 15   == false\n```\n","title":"between","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]}]},null]}},"sourceSpan":{"start":[203,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[203,53]}},{"kind":null,"children":[],"comments":"The absolute value function. `abs x` is defined as `if x >= zero then x\nelse negate x`.\n","title":"abs","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[211,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[211,43]}},{"kind":null,"children":[],"comments":"The sign function; always evaluates to either `one` or `negate one`. For\nany `x`, we should have `signum x * abs x == x`.\n","title":"signum","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[216,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[216,46]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"compareRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}]},null]}},"sourceSpan":{"start":[228,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[228,91]}},{"comments":null,"title":"ordRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"OrdRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[230,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[231,27]}},{"comments":null,"title":"ordRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"OrdRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"rowTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"OrdRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[233,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[247,59]}}],"comments":null,"title":"OrdRecord","info":{"fundeps":[],"arguments":[["rowlist",null],["row",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"EqRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[227,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[228,91]}}]}+{"reExports":[],"name":"Data.Ord","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"compare","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}},"sourceSpan":{"start":[49,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[49,32]}},{"comments":null,"title":"ordBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[52,36]}},{"comments":null,"title":"ordInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[54,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[55,32]}},{"comments":null,"title":"ordNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[58,35]}},{"comments":null,"title":"ordString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[61,35]}},{"comments":null,"title":"ordChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[64,33]}},{"comments":null,"title":"ordUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[66,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[67,19]}},{"comments":null,"title":"ordVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[70,19]}},{"comments":null,"title":"ordProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[73,19]}},{"comments":null,"title":"ordArray","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[75,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[82,17]}},{"comments":null,"title":"ordOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[126,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[133,20]}},{"comments":null,"title":"ordRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ord"],"OrdRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[259,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[264,48]}}],"comments":"The `Ord` type class represents types which support comparisons with a\n_total order_.\n\n`Ord` instances should satisfy the laws of total orderings:\n\n- Reflexivity: `a <= a`\n- Antisymmetry: if `a <= b` and `b <= a` then `a = b`\n- Transitivity: if `a <= b` and `b <= c` then `a <= c`\n\n**Note:** The `Number` type is not an entirely law abiding member of this\nclass due to the presence of `NaN`, since `NaN <= NaN` evaluates to `false`\n","title":"Ord","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[49,32]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"compare1","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"f"},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}]},null]}},"sourceSpan":{"start":[232,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[232,56]}},{"comments":null,"title":"ord1Array","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"Ord1"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]}]}},"sourceSpan":{"start":[234,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[235,21]}}],"comments":"The `Ord1` type class represents totally ordered type constructors.\n","title":"Ord1","info":{"fundeps":[],"arguments":[["f",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"Eq1"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"f"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[231,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[232,56]}},{"kind":null,"children":[],"comments":"Test whether one value is _strictly less than_ another.\n","title":"lessThan","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[136,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[136,49]}},{"kind":null,"children":[],"comments":null,"title":"(<)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"lessThan"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[159,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[159,23]}},{"kind":null,"children":[],"comments":"Test whether one value is _non-strictly less than_ another.\n","title":"lessThanOrEq","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[148,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[148,53]}},{"kind":null,"children":[],"comments":null,"title":"(<=)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"lessThanOrEq"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[160,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[160,28]}},{"kind":null,"children":[],"comments":"Test whether one value is _strictly greater than_ another.\n","title":"greaterThan","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[142,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[142,52]}},{"kind":null,"children":[],"comments":null,"title":"(>)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"greaterThan"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[161,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[161,26]}},{"kind":null,"children":[],"comments":"Test whether one value is _non-strictly greater than_ another.\n","title":"greaterThanOrEq","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]},null]}},"sourceSpan":{"start":[154,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[154,56]}},{"kind":null,"children":[],"comments":null,"title":"(>=)","info":{"declType":"alias","alias":[["Data","Ord"],{"Right":{"Left":{"Ident":"greaterThanOrEq"}}}],"fixity":{"associativity":"infixl","precedence":4}},"sourceSpan":{"start":[162,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[162,31]}},{"kind":null,"children":[],"comments":"Compares two values by mapping them to a type with an `Ord` instance.\n","title":"comparing","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["b",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}}]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}}]}]},null]},null]}},"sourceSpan":{"start":[165,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[165,67]}},{"kind":null,"children":[],"comments":"Take the minimum of two values. If they are considered equal, the first\nargument is chosen.\n","title":"min","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[170,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[170,38]}},{"kind":null,"children":[],"comments":"Take the maximum of two values. If they are considered equal, the first\nargument is chosen.\n","title":"max","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[179,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[179,38]}},{"kind":null,"children":[],"comments":"Clamp a value between a minimum and a maximum. For example:\n\n``` purescript\nlet f = clamp 0 10\nf (-5) == 0\nf 5    == 5\nf 15   == 10\n```\n","title":"clamp","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]}},"sourceSpan":{"start":[194,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[194,45]}},{"kind":null,"children":[],"comments":"Test whether a value is between a minimum and a maximum (inclusive).\nFor example:\n\n``` purescript\nlet f = between 0 10\nf 0    == true\nf (-5) == false\nf 5    == true\nf 10   == true\nf 15   == false\n```\n","title":"between","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}]}]}]},null]}},"sourceSpan":{"start":[208,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[208,53]}},{"kind":null,"children":[],"comments":"The absolute value function. `abs x` is defined as `if x >= zero then x\nelse negate x`.\n","title":"abs","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[216,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[216,43]}},{"kind":null,"children":[],"comments":"The sign function; returns `one` if the argument is positive,\n`negate one` if the argument is negative, or `zero` if the argument is `zero`.\nFor floating point numbers with signed zeroes, when called with a zero,\nthis function returns the argument in order to preserve the sign.\nFor any `x`, we should have `signum x * abs x == x`.\n","title":"signum","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]},null]}},"sourceSpan":{"start":[224,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[224,46]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"compareRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}]}]}},"sourceSpan":{"start":[239,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[239,73]}},{"comments":null,"title":"ordRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"OrdRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[241,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[242,27]}},{"comments":null,"title":"ordRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Ord"],"OrdRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"rowTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ord"],"Ord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ord"],"OrdRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[244,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[257,57]}}],"comments":null,"title":"OrdRecord","info":{"fundeps":[],"arguments":[["rowlist",null],["row",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Eq"],"EqRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[238,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs","end":[239,73]}}]}
tests/purs/publish/basic-example/output/Data.Ordering/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Ordering","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"LT","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,15],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,19]}},{"comments":null,"title":"GT","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,20],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,24]}},{"comments":null,"title":"EQ","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,25],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,29]}},{"comments":null,"title":"eqOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[15,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[19,19]}},{"comments":null,"title":"semigroupOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[24,18]}},{"comments":null,"title":"showOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[29,17]}}],"comments":"The `Ordering` data type represents the three possible outcomes of\ncomparing two values:\n\n`LT` - The first value is _less than_ the second.\n`GT` - The first value is _greater than_ the second.\n`EQ` - The first value is _equal to_ the second.\n","title":"Ordering","info":{"roles":[],"declType":"data","dataDeclType":"data","typeArguments":[]},"sourceSpan":{"start":[13,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,29]}},{"kind":null,"children":[],"comments":"Reverses an `Ordering` value, flipping greater than for less than while\npreserving equality.\n","title":"invert","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[33,31]}}]}+{"reExports":[],"name":"Data.Ordering","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"LT","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,15],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,19]}},{"comments":null,"title":"GT","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,20],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,24]}},{"comments":null,"title":"EQ","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,25],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,29]}},{"comments":null,"title":"eqOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Eq"],"Eq"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[15,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[19,17]}},{"comments":null,"title":"semigroupOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[24,18]}},{"comments":null,"title":"showOrdering","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[29,17]}}],"comments":"The `Ordering` data type represents the three possible outcomes of\ncomparing two values:\n\n`LT` - The first value is _less than_ the second.\n`GT` - The first value is _greater than_ the second.\n`EQ` - The first value is _equal to_ the second.\n","title":"Ordering","info":{"roles":[],"declType":"data","dataDeclType":"data","typeArguments":[]},"sourceSpan":{"start":[13,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[13,29]}},{"kind":null,"children":[],"comments":"Reverses an `Ordering` value, flipping greater than for less than while\npreserving equality.\n","title":"invert","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs","end":[33,31]}}]}
+ tests/purs/publish/basic-example/output/Data.Reflectable/docs.json view
@@ -0,0 +1,1 @@+{"reExports":[],"name":"Data.Reflectable","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"ForAll","contents":["k",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},null]},"keyword":"class"},"children":[{"comments":"Reflect a type `v` to its term-level representation.\n","title":"reflectType","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"v"}]}]},{"annotation":[],"tag":"TypeVar","contents":"t"}]}},"sourceSpan":{"start":[21,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[21,30]}}],"comments":"A type-class for reflectable types.\n\nInstances for the following kinds are solved by the compiler:\n* Boolean\n* Int\n* Ordering\n* Symbol\n","title":"Reflectable","info":{"fundeps":[[["v"],["t"]]],"arguments":[["v",null],["t",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[19,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[21,30]}},{"kind":null,"children":[{"comments":null,"title":"<anonymous>","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Reflectable"],"Reifiable"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[30,27]}},{"comments":null,"title":"<anonymous>","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Reflectable"],"Reifiable"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[31,23]}},{"comments":null,"title":"<anonymous>","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Reflectable"],"Reifiable"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ordering"],"Ordering"]}]}},"sourceSpan":{"start":[32,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[32,28]}},{"comments":null,"title":"<anonymous>","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Reflectable"],"Reifiable"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[33,26]}}],"comments":"A type class for reifiable types.\n\nInstances of this type class correspond to the `t` synthesized\nby the compiler when solving the `Reflectable` type class.\n","title":"Reifiable","info":{"fundeps":[],"arguments":[["t",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[28,18]}},{"kind":null,"children":[],"comments":"Reify a value of type `t` such that it can be consumed by a\nfunction constrained by the `Reflectable` type class. For\nexample:\n\n```purs\ntwiceFromType :: forall v. Reflectable v Int => Proxy v -> Int\ntwiceFromType = (_ * 2) <<< reflectType\n\ntwiceOfTerm :: Int\ntwiceOfTerm = reifyType 21 twiceFromType\n```\n","title":"reifyType","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["t",{"annotation":[],"tag":"ForAll","contents":["r",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Reflectable"],"Reifiable"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"t"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"t"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"ForAll","contents":["v",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Reflectable"],"Reflectable"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"v"},{"annotation":[],"tag":"TypeVar","contents":"t"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"v"}]}]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]},null]}}]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]}]},null]},null]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs","end":[49,94]}}]}
tests/purs/publish/basic-example/output/Data.Ring/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Ring","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"sub","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[24,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[24,21]}},{"comments":null,"title":"ringInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[28,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[29,15]}},{"comments":null,"title":"ringNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[32,15]}},{"comments":null,"title":"ringUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[35,17]}},{"comments":null,"title":"ringFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[38,24]}},{"comments":null,"title":"ringProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[41,18]}},{"comments":null,"title":"ringProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[44,19]}},{"comments":null,"title":"ringProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[47,19]}},{"comments":null,"title":"ringRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ring"],"RingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[50,40]}}],"comments":"The `Ring` class is for types that support addition, multiplication,\nand subtraction operations.\n\nInstances must satisfy the following laws in addition to the `Semiring`\nlaws:\n\n- Additive inverse: `a - a = zero`\n- Compatibility of `sub` and `negate`: `a - b = a + (zero - b)`\n","title":"Ring","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[24,21]}},{"kind":null,"children":[],"comments":"`negate x` can be used as a shorthand for `zero - x`.\n","title":"negate","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[53,37]}},{"kind":null,"children":[],"comments":null,"title":"(-)","info":{"declType":"alias","alias":[["Data","Ring"],{"Right":{"Left":{"Ident":"sub"}}}],"fixity":{"associativity":"infixl","precedence":6}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[26,18]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"subRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[63,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[63,92]}},{"comments":null,"title":"ringRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"RingRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[66,23]}},{"comments":null,"title":"ringRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ring"],"RingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"RingRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[80,58]}}],"comments":"A class for records where all fields have `Ring` instances, used to\nimplement the `Ring` instance for records.\n","title":"RingRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"SemiringRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[63,92]}}]}+{"reExports":[],"name":"Data.Ring","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"sub","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[28,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[28,21]}},{"comments":null,"title":"ringInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[32,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[33,15]}},{"comments":null,"title":"ringNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[36,15]}},{"comments":null,"title":"ringUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[39,17]}},{"comments":null,"title":"ringFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[41,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[42,24]}},{"comments":null,"title":"ringProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[45,18]}},{"comments":null,"title":"ringRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ring"],"RingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"Ring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[47,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[48,40]}}],"comments":"The `Ring` class is for types that support addition, multiplication,\nand subtraction operations.\n\nInstances must satisfy the following laws in addition to the `Semiring`\nlaws:\n\n- Additive inverse: `a - a = zero`\n- Compatibility of `sub` and `negate`: `a - b = a + (zero - b)`\n","title":"Ring","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[28,21]}},{"kind":null,"children":[],"comments":"`negate x` can be used as a shorthand for `zero - x`.\n","title":"negate","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[51,37]}},{"kind":null,"children":[],"comments":null,"title":"(-)","info":{"declType":"alias","alias":[["Data","Ring"],{"Right":{"Left":{"Ident":"sub"}}}],"fixity":{"associativity":"infixl","precedence":6}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[30,18]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"subRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[61,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[61,74]}},{"comments":null,"title":"ringRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"RingRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[63,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[64,23]}},{"comments":null,"title":"ringRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ring"],"RingRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Ring"],"Ring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Ring"],"RingRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[66,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[78,56]}}],"comments":"A class for records where all fields have `Ring` instances, used to\nimplement the `Ring` instance for records.\n","title":"RingRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"SemiringRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlist"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null}]},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs","end":[61,74]}}]}
tests/purs/publish/basic-example/output/Data.Semigroup/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Semigroup","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"append","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[32,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[32,24]}},{"comments":null,"title":"semigroupString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[37,24]}},{"comments":null,"title":"semigroupUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[40,20]}},{"comments":null,"title":"semigroupVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[43,20]}},{"comments":null,"title":"semigroupFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"Semigroup"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s'"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"s"}]},{"annotation":[],"tag":"TypeVar","contents":"s'"}]}]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[46,28]}},{"comments":null,"title":"semigroupArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[49,23]}},{"comments":null,"title":"semigroupProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[52,21]}},{"comments":null,"title":"semigroupProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[54,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[55,22]}},{"comments":null,"title":"semigroupProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[58,22]}},{"comments":null,"title":"semigroupRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"SemigroupRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[60,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[61,46]}}],"comments":"The `Semigroup` type class identifies an associative operation on a type.\n\nInstances are required to satisfy the following law:\n\n- Associativity: `(x <> y) <> z = x <> (y <> z)`\n\nOne example of a `Semigroup` is `String`, with `(<>)` defined as string\nconcatenation. Another example is `List a`, with `(<>)` defined as\nlist concatenation.\n\n### Newtypes for Semigroup\n\nThere are two other ways to implement an instance for this type class\nregardless of which type is used. These instances can be used by\nwrapping the values in one of the two newtypes below:\n1. `First` - Use the first argument every time: `append first _ = first`.\n2. `Last` - Use the last argument every time: `append _ last = last`.\n","title":"Semigroup","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[32,24]}},{"kind":null,"children":[],"comments":null,"title":"(<>)","info":{"declType":"alias","alias":[["Data","Semigroup"],{"Right":{"Left":{"Ident":"append"}}}],"fixity":{"associativity":"infixr","precedence":5}},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[34,22]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"appendRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[70,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[70,95]}},{"comments":null,"title":"semigroupRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"SemigroupRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[73,26]}},{"comments":null,"title":"semigroupRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"SemigroupRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"Semigroup"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"SemigroupRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[75,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[87,61]}}],"comments":"A class for records where all fields have `Semigroup` instances, used to\nimplement the `Semigroup` instance for records.\n","title":"SemigroupRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[70,95]}}]}+{"reExports":[],"name":"Data.Semigroup","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"append","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[35,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[35,24]}},{"comments":null,"title":"semigroupString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[40,24]}},{"comments":null,"title":"semigroupUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[43,20]}},{"comments":null,"title":"semigroupVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[46,20]}},{"comments":null,"title":"semigroupFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"Semigroup"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"s'"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"s"}]},{"annotation":[],"tag":"TypeVar","contents":"s'"}]}]}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[49,28]}},{"comments":null,"title":"semigroupArray","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[52,23]}},{"comments":null,"title":"semigroupProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[54,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[55,21]}},{"comments":null,"title":"semigroupRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"SemigroupRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"Semigroup"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[57,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[58,46]}}],"comments":"The `Semigroup` type class identifies an associative operation on a type.\n\nInstances are required to satisfy the following law:\n\n- Associativity: `(x <> y) <> z = x <> (y <> z)`\n\nOne example of a `Semigroup` is `String`, with `(<>)` defined as string\nconcatenation. Another example is `List a`, with `(<>)` defined as\nlist concatenation.\n\n### Newtypes for Semigroup\n\nThere are two other ways to implement an instance for this type class\nregardless of which type is used. These instances can be used by\nwrapping the values in one of the two newtypes below:\n1. `First` - Use the first argument every time: `append first _ = first`.\n2. `Last` - Use the last argument every time: `append _ last = last`.\n","title":"Semigroup","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[35,24]}},{"kind":null,"children":[],"comments":null,"title":"(<>)","info":{"declType":"alias","alias":[["Data","Semigroup"],{"Right":{"Left":{"Ident":"append"}}}],"fixity":{"associativity":"infixr","precedence":5}},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[37,22]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"appendRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[67,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[67,77]}},{"comments":null,"title":"semigroupRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"SemigroupRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[69,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[70,26]}},{"comments":null,"title":"semigroupRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"SemigroupRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semigroup"],"Semigroup"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semigroup"],"SemigroupRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[72,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[84,59]}}],"comments":"A class for records where all fields have `Semigroup` instances, used to\nimplement the `Semigroup` instance for records.\n","title":"SemigroupRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[66,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs","end":[67,77]}}]}
tests/purs/publish/basic-example/output/Data.Semiring.Generic/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Semiring.Generic","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"genericAdd'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[8,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[8,30]}},{"comments":null,"title":"genericZero'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[9,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[9,20]}},{"comments":null,"title":"genericMul'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[10,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[10,30]}},{"comments":null,"title":"genericOne'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[11,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[11,20]}},{"comments":null,"title":"genericSemiringNoArguments","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoArguments"]}]}},"sourceSpan":{"start":[13,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[17,28]}},{"comments":null,"title":"genericSemiringArgument","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Argument"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[19,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[23,29]}},{"comments":null,"title":"genericSemiringProduct","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Product"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[29,48]}},{"comments":null,"title":"genericSemiringConstructor","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Constructor"]},{"annotation":[],"tag":"TypeVar","contents":"name"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[35,40]}}],"comments":null,"title":"GenericSemiring","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[7,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[11,20]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `zero` member from the `Semiring` type class.\n","title":"genericZero","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[38,71]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `one` member from the `Semiring` type class.\n","title":"genericOne","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[42,70]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `add` member from the `Semiring` type class.\n","title":"genericAdd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[46,80]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `mul` member from the `Semiring` type class.\n","title":"genericMul","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[50,80]}}]}+{"reExports":[],"name":"Data.Semiring.Generic","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"genericAdd'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[8,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[8,29]}},{"comments":null,"title":"genericZero'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[9,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[9,20]}},{"comments":null,"title":"genericMul'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[10,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[10,29]}},{"comments":null,"title":"genericOne'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[11,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[11,19]}},{"comments":null,"title":"genericSemiringNoArguments","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoArguments"]}]}},"sourceSpan":{"start":[13,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[17,28]}},{"comments":null,"title":"genericSemiringArgument","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Argument"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[19,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[23,29]}},{"comments":null,"title":"genericSemiringProduct","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Product"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[29,48]}},{"comments":null,"title":"genericSemiringConstructor","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring","Generic"],"GenericSemiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Constructor"]},{"annotation":[],"tag":"TypeVar","contents":"name"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[31,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[35,40]}}],"comments":null,"title":"GenericSemiring","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[7,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[11,19]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `zero` member from the `Semiring` type class.\n","title":"genericZero","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[38,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[38,71]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `one` member from the `Semiring` type class.\n","title":"genericOne","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]},null]},null]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[42,70]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `add` member from the `Semiring` type class.\n","title":"genericAdd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[46,80]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `mul` member from the `Semiring` type class.\n","title":"genericMul","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Semiring","Generic"],"GenericSemiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}]}]},null]},null]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs","end":[50,80]}}]}
tests/purs/publish/basic-example/output/Data.Semiring/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Semiring","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"add","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[35,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[35,22]}},{"comments":null,"title":"zero","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[36,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[36,12]}},{"comments":null,"title":"mul","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[37,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[37,22]}},{"comments":null,"title":"one","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[38,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[38,12]}},{"comments":null,"title":"semiringInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[43,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[47,10]}},{"comments":null,"title":"semiringNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[53,12]}},{"comments":null,"title":"semiringFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[59,18]}},{"comments":null,"title":"semiringUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[65,13]}},{"comments":null,"title":"semiringProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[67,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[71,15]}},{"comments":null,"title":"semiringProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[73,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[77,16]}},{"comments":null,"title":"semiringProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[79,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[83,16]}},{"comments":null,"title":"semiringRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"SemiringRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[85,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[89,63]}}],"comments":"The `Semiring` class is for types that support an addition and\nmultiplication operation.\n\nInstances must satisfy the following laws:\n\n- Commutative monoid under addition:\n  - Associativity: `(a + b) + c = a + (b + c)`\n  - Identity: `zero + a = a + zero = a`\n  - Commutative: `a + b = b + a`\n- Monoid under multiplication:\n  - Associativity: `(a * b) * c = a * (b * c)`\n  - Identity: `one * a = a * one = a`\n- Multiplication distributes over addition:\n  - Left distributivity: `a * (b + c) = (a * b) + (a * c)`\n  - Right distributivity: `(a + b) * c = (a * c) + (b * c)`\n- Annihilation: `zero * a = a * zero = zero`\n\n**Note:** The `Number` and `Int` types are not fully law abiding\nmembers of this class hierarchy due to the potential for arithmetic\noverflows, and in the case of `Number`, the presence of `NaN` and\n`Infinity` values. The behaviour is unspecified in these cases.\n","title":"Semiring","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[34,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[38,12]}},{"kind":null,"children":[],"comments":null,"title":"(+)","info":{"declType":"alias","alias":[["Data","Semiring"],{"Right":{"Left":{"Ident":"add"}}}],"fixity":{"associativity":"infixl","precedence":6}},"sourceSpan":{"start":[40,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[40,18]}},{"kind":null,"children":[],"comments":null,"title":"(*)","info":{"declType":"alias","alias":[["Data","Semiring"],{"Right":{"Left":{"Ident":"mul"}}}],"fixity":{"associativity":"infixl","precedence":7}},"sourceSpan":{"start":[41,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[41,18]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"addRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[100,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[100,92]}},{"comments":null,"title":"mulRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]},null]}},"sourceSpan":{"start":[101,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[101,92]}},{"comments":null,"title":"oneRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"ForAll","contents":["rproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rproxy"},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]},null]}},"sourceSpan":{"start":[102,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[102,85]}},{"comments":null,"title":"zeroRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"ForAll","contents":["rproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rproxy"},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]},null]},null]}},"sourceSpan":{"start":[103,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[103,86]}},{"comments":null,"title":"semiringRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"SemiringRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[105,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[109,22]}},{"comments":null,"title":"semiringRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"SemiringRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"SemiringRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[111,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[142,76]}}],"comments":"A class for records where all fields have `Semiring` instances, used to\nimplement the `Semiring` instance for records.\n","title":"SemiringRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[99,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[103,86]}}]}+{"reExports":[],"name":"Data.Semiring","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"add","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[45,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[45,21]}},{"comments":null,"title":"zero","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[46,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[46,12]}},{"comments":null,"title":"mul","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[47,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[47,21]}},{"comments":null,"title":"one","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeVar","contents":"a"}},"sourceSpan":{"start":[48,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[48,11]}},{"comments":null,"title":"semiringInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[57,10]}},{"comments":null,"title":"semiringNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[63,12]}},{"comments":null,"title":"semiringFn","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[69,18]}},{"comments":null,"title":"semiringUnit","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[71,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[75,13]}},{"comments":null,"title":"semiringProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[77,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[81,15]}},{"comments":null,"title":"semiringRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"list"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"SemiringRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"list"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"Semiring"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]}},"sourceSpan":{"start":[83,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[87,63]}}],"comments":"The `Semiring` class is for types that support an addition and\nmultiplication operation.\n\nInstances must satisfy the following laws:\n\n- Commutative monoid under addition:\n  - Associativity: `(a + b) + c = a + (b + c)`\n  - Identity: `zero + a = a + zero = a`\n  - Commutative: `a + b = b + a`\n- Monoid under multiplication:\n  - Associativity: `(a * b) * c = a * (b * c)`\n  - Identity: `one * a = a * one = a`\n- Multiplication distributes over addition:\n  - Left distributivity: `a * (b + c) = (a * b) + (a * c)`\n  - Right distributivity: `(a + b) * c = (a * c) + (b * c)`\n- Annihilation: `zero * a = a * zero = zero`\n\n**Note:** The `Number` and `Int` types are not fully law abiding\nmembers of this class hierarchy due to the potential for arithmetic\noverflows, and in the case of `Number`, the presence of `NaN` and\n`Infinity` values. The behaviour is unspecified in these cases.\n","title":"Semiring","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[44,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[48,11]}},{"kind":null,"children":[],"comments":null,"title":"(+)","info":{"declType":"alias","alias":[["Data","Semiring"],{"Right":{"Left":{"Ident":"add"}}}],"fixity":{"associativity":"infixl","precedence":6}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[50,18]}},{"kind":null,"children":[],"comments":null,"title":"(*)","info":{"declType":"alias","alias":[["Data","Semiring"],{"Right":{"Left":{"Ident":"mul"}}}],"fixity":{"associativity":"infixl","precedence":7}},"sourceSpan":{"start":[51,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[51,18]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"addRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[98,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[98,74]}},{"comments":null,"title":"mulRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}]}},"sourceSpan":{"start":[99,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[99,74]}},{"comments":null,"title":"oneRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[100,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[100,59]}},{"comments":null,"title":"zeroRecord","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}]}]}},"sourceSpan":{"start":[101,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[101,60]}},{"comments":null,"title":"semiringRecordNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"SemiringRecord"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"REmpty"}]}},"sourceSpan":{"start":[103,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[107,22]}},{"comments":null,"title":"semiringRecordCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Cons"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"},{"annotation":[],"tag":"TypeVar","contents":"focus"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"},{"annotation":[],"tag":"TypeVar","contents":"subrow"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"SemiringRecord"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"},{"annotation":[],"tag":"TypeVar","contents":"subrowTail"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Semiring"],"Semiring"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Semiring"],"SemiringRecord"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]},{"annotation":[],"tag":"TypeVar","contents":"subrow"}]}},"sourceSpan":{"start":[109,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[140,74]}}],"comments":"A class for records where all fields have `Semiring` instances, used to\nimplement the `Semiring` instance for records.\n","title":"SemiringRecord","info":{"fundeps":[[["rowlist"],["subrow"]]],"arguments":[["rowlist",null],["row",null],["subrow",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[97,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs","end":[101,60]}}]}
tests/purs/publish/basic-example/output/Data.Show.Generic/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Show.Generic","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"genericShow'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[15,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[15,30]}},{"comments":null,"title":"genericShowNoConstructors","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShow"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoConstructors"]}]}},"sourceSpan":{"start":[20,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[21,34]}},{"comments":null,"title":"genericShowSum","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShow"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShow"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShow"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Sum"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[28,40]}},{"comments":null,"title":"genericShowConstructor","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShowArgs"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"name"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShow"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Constructor"]},{"annotation":[],"tag":"TypeVar","contents":"name"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[44,49]}}],"comments":null,"title":"GenericShow","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[14,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[15,30]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `show` member from the `Show` type class.\n","title":"genericShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShow"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}]}]},null]},null]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[50,77]}},{"kind":null,"children":[{"comments":null,"title":"genericShowArgs","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}]}},"sourceSpan":{"start":[18,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[18,39]}},{"comments":null,"title":"genericShowArgsNoArguments","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShowArgs"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoArguments"]}]}},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[24,25]}},{"comments":null,"title":"genericShowArgsProduct","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShowArgs"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShowArgs"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShowArgs"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Product"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[33,73]}},{"comments":null,"title":"genericShowArgsArgument","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShowArgs"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Argument"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[46,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[47,42]}}],"comments":null,"title":"GenericShowArgs","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[17,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[18,39]}}]}+{"reExports":[],"name":"Data.Show.Generic","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"genericShow'","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[15,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[15,30]}},{"comments":null,"title":"genericShowNoConstructors","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShow"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoConstructors"]}]}},"sourceSpan":{"start":[20,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[21,34]}},{"comments":null,"title":"genericShowSum","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShow"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShow"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShow"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Sum"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[26,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[28,40]}},{"comments":null,"title":"genericShowConstructor","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShowArgs"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"name"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShow"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Constructor"]},{"annotation":[],"tag":"TypeVar","contents":"name"}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[37,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[48,47]}}],"comments":null,"title":"GenericShow","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[14,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[15,30]}},{"kind":null,"children":[],"comments":"A `Generic` implementation of the `show` member from the `Show` type class.\n","title":"genericShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ForAll","contents":["rep",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Generic","Rep"],"Generic"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"},{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShow"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rep"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}]}]},null]},null]}},"sourceSpan":{"start":[54,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[54,77]}},{"kind":null,"children":[{"comments":null,"title":"genericShowArgs","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}]}},"sourceSpan":{"start":[18,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[18,39]}},{"comments":null,"title":"genericShowArgsNoArguments","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShowArgs"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"NoArguments"]}]}},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[24,25]}},{"comments":null,"title":"genericShowArgsProduct","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShowArgs"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show","Generic"],"GenericShowArgs"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"b"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShowArgs"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Product"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeVar","contents":"b"}]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[35,73]}},{"comments":null,"title":"genericShowArgsArgument","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show","Generic"],"GenericShowArgs"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Generic","Rep"],"Argument"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[50,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[51,44]}}],"comments":null,"title":"GenericShowArgs","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[17,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs","end":[18,39]}}]}
tests/purs/publish/basic-example/output/Data.Show/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Show","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"show","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[18,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[18,22]}},{"comments":null,"title":"showBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[20,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[22,23]}},{"comments":null,"title":"showInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[25,21]}},{"comments":null,"title":"showNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[28,24]}},{"comments":null,"title":"showChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[31,22]}},{"comments":null,"title":"showString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[34,24]}},{"comments":null,"title":"showArray","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[37,28]}},{"comments":null,"title":"showProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[40,19]}},{"comments":null,"title":"showProxy2","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy2"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[43,20]}},{"comments":null,"title":"showProxy3","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy3"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[46,20]}},{"comments":null,"title":"showRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rs"},{"annotation":[],"tag":"TypeVar","contents":"ls"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"ShowRecordFields"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"ls"},{"annotation":[],"tag":"TypeVar","contents":"rs"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"rs"}]}]}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[51,52]}}],"comments":"The `Show` type class represents those types which can be converted into\na human-readable `String` representation.\n\nWhile not required, it is recommended that for any expression `x`, the\nstring `show x` be executable PureScript code which evaluates to the same\nvalue as the expression `x`.\n","title":"Show","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[17,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[18,22]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"showRecordFields","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["rlproxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"rlproxy"},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}]}]},null]}},"sourceSpan":{"start":[57,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[57,84]}},{"comments":null,"title":"showRecordFieldsNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"ShowRecordFields"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[60,28]}},{"comments":null,"title":"showRecordFieldsCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"ShowRecordFields"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"ShowRecordFields"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[73,66]}}],"comments":"A class for records where all fields have `Show` instances, used to\nimplement the `Show` instance for records.\n","title":"ShowRecordFields","info":{"fundeps":[],"arguments":[["rowlist",null],["row",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[56,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[57,84]}}]}+{"reExports":[],"name":"Data.Show","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"show","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[21,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[21,22]}},{"comments":null,"title":"showBoolean","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Boolean"]}]}},"sourceSpan":{"start":[23,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[25,23]}},{"comments":null,"title":"showInt","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[28,21]}},{"comments":null,"title":"showNumber","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Number"]}]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[31,24]}},{"comments":null,"title":"showChar","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Char"]}]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[34,22]}},{"comments":null,"title":"showString","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[37,24]}},{"comments":null,"title":"showArray","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[40,28]}},{"comments":null,"title":"showProxy","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]}]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[43,19]}},{"comments":null,"title":"showRecord","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Prim","Row"],"Nub"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rs"},{"annotation":[],"tag":"TypeVar","contents":"rs"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Prim","RowList"],"RowToList"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rs"},{"annotation":[],"tag":"TypeVar","contents":"ls"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"ShowRecordFields"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"ls"},{"annotation":[],"tag":"TypeVar","contents":"rs"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"rs"}]}]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[53,68]}}],"comments":"The `Show` type class represents those types which can be converted into\na human-readable `String` representation.\n\nWhile not required, it is recommended that for any expression `x`, the\nstring `show x` be executable PureScript code which evaluates to the same\nvalue as the expression `x`.\n","title":"Show","info":{"fundeps":[],"arguments":[["a",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[20,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[21,22]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]}]},"keyword":"class"},"children":[{"comments":null,"title":"showRecordFields","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"rowlist"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Record"]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Array"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}]}]}},"sourceSpan":{"start":[59,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[59,66]}},{"comments":null,"title":"showRecordFieldsNil","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"ShowRecordFields"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Nil"]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[61,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[62,28]}},{"comments":null,"title":"showRecordFieldsCons","info":{"declType":"instance","dependencies":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"key"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"ShowRecordFields"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"},{"annotation":[],"tag":"TypeVar","contents":"row"}],"constraintKindArgs":[],"constraintData":null},{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"focus"}],"constraintKindArgs":[],"constraintData":null}],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"ShowRecordFields"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"Cons"]},{"annotation":[],"tag":"TypeVar","contents":"key"}]},{"annotation":[],"tag":"TypeVar","contents":"focus"}]},{"annotation":[],"tag":"TypeVar","contents":"rowlistTail"}]}]},{"annotation":[],"tag":"TypeVar","contents":"row"}]}},"sourceSpan":{"start":[64,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[74,64]}}],"comments":"A class for records where all fields have `Show` instances, used to\nimplement the `Show` instance for records.\n","title":"ShowRecordFields","info":{"fundeps":[],"arguments":[["rowlist",null],["row",null]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Show.purs","end":[59,66]}}]}
tests/purs/publish/basic-example/output/Data.Symbol/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Symbol","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"reflectSymbol","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"ForAll","contents":["proxy",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"proxy"},{"annotation":[],"tag":"TypeVar","contents":"sym"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},null]}},"sourceSpan":{"start":[24,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[24,53]}}],"comments":"A class for known symbols\n","title":"IsSymbol","info":{"fundeps":[],"arguments":[["sym",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[16,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[24,53]}},{"kind":null,"children":[],"comments":null,"title":"reifySymbol","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["proxy",{"annotation":[],"tag":"ForAll","contents":["r",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"ForAll","contents":["sym",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"sym"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"proxy"},{"annotation":[],"tag":"TypeVar","contents":"sym"}]}]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]},null]}}]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]},null]},null]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[29,91]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},"keyword":"data"},"children":[{"comments":null,"title":"SProxy","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[13,17],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[13,25]}}],"comments":"A value-level proxy for a type-level symbol.\n**Deprecated as of v0.14.0 PureScript release**: use `Type.Proxy` instead.\n","title":"SProxy","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["sym",null]]},"sourceSpan":{"start":[13,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[13,25]}}]}+{"reExports":[],"name":"Data.Symbol","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Constraint"]}]},"keyword":"class"},"children":[{"comments":null,"title":"reflectSymbol","info":{"declType":"typeClassMember","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"sym"}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]}},"sourceSpan":{"start":[11,3],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[11,39]}}],"comments":"A class for known symbols\n","title":"IsSymbol","info":{"fundeps":[],"arguments":[["sym",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":{"start":[10,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[11,39]}},{"kind":null,"children":[],"comments":null,"title":"reifySymbol","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["r",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"ForAll","contents":["sym",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Symbol"],"IsSymbol"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"sym"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Type","Proxy"],"Proxy"]},{"annotation":[],"tag":"TypeVar","contents":"sym"}]}]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]},null]}}]},{"annotation":[],"tag":"TypeVar","contents":"r"}]}]},null]}},"sourceSpan":{"start":[16,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs","end":[16,85]}}]}
tests/purs/publish/basic-example/output/Data.Void/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Data.Void","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"showVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Void.purs","end":[25,16]}}],"comments":"An uninhabited data type. In other words, one can never create\na runtime value of type `Void` becaue no such value exists.\n\n`Void` is useful to eliminate the possibility of a value being created.\nFor example, a value of type `Either Void Boolean` can never have\na Left value created in PureScript.\n\nThis should not be confused with the keyword `void` that commonly appears in\nC-family languages, such as Java:\n```\npublic class Foo {\n  void doSomething() { System.out.println(\"hello world!\"); }\n}\n```\n\nIn PureScript, one often uses `Unit` to achieve similar effects as\nthe `void` of C-family languages above.\n","title":"Void","info":{"roles":[],"declType":"data","dataDeclType":"newtype","typeArguments":[]},"sourceSpan":{"start":[22,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Void.purs","end":[22,25]}},{"kind":null,"children":[],"comments":"Eliminator for the `Void` type.\nUseful for stating that some code branch is impossible because you've\n\"acquired\" a value of type `Void` (which you can't).\n\n```purescript\nrightOnly :: forall t . Either Void t -> t\nrightOnly (Left v) = absurd v\nrightOnly (Right t) = t\n```\n","title":"absurd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},null]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Void.purs","end":[36,30]}}]}+{"reExports":[],"name":"Data.Void","comments":null,"declarations":[{"kind":null,"children":[{"comments":null,"title":"showVoid","info":{"declType":"instance","dependencies":[],"type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Show"],"Show"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Void.purs","end":[25,16]}}],"comments":"An uninhabited data type. In other words, one can never create\na runtime value of type `Void` because no such value exists.\n\n`Void` is useful to eliminate the possibility of a value being created.\nFor example, a value of type `Either Void Boolean` can never have\na Left value created in PureScript.\n\nThis should not be confused with the keyword `void` that commonly appears in\nC-family languages, such as Java:\n```\npublic class Foo {\n  void doSomething() { System.out.println(\"hello world!\"); }\n}\n```\n\nIn PureScript, one often uses `Unit` to achieve similar effects as\nthe `void` of C-family languages above.\n","title":"Void","info":{"roles":[],"declType":"data","dataDeclType":"newtype","typeArguments":[]},"sourceSpan":{"start":[22,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Void.purs","end":[22,25]}},{"kind":null,"children":[],"comments":"Eliminator for the `Void` type.\nUseful for stating that some code branch is impossible because you've\n\"acquired\" a value of type `Void` (which you can't).\n\n```purescript\nrightOnly :: forall t . Either Void t -> t\nrightOnly (Left v) = absurd v\nrightOnly (Right t) = t\n```\n","title":"absurd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Void"],"Void"]}]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},null]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-prelude/src/Data/Void.purs","end":[36,30]}}]}
tests/purs/publish/basic-example/output/Effect.Class.Console/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Effect.Class.Console","comments":null,"declarations":[{"kind":null,"children":[],"comments":null,"title":"log","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[9,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[9,51]}},{"kind":null,"children":[],"comments":null,"title":"logShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[12,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[12,62]}},{"kind":null,"children":[],"comments":null,"title":"warn","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[15,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[15,52]}},{"kind":null,"children":[],"comments":null,"title":"warnShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[18,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[18,63]}},{"kind":null,"children":[],"comments":null,"title":"error","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[21,53]}},{"kind":null,"children":[],"comments":null,"title":"errorShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[24,64]}},{"kind":null,"children":[],"comments":null,"title":"info","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[27,52]}},{"kind":null,"children":[],"comments":null,"title":"infoShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[30,63]}},{"kind":null,"children":[],"comments":null,"title":"time","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[33,52]}},{"kind":null,"children":[],"comments":null,"title":"timeLog","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[36,55]}},{"kind":null,"children":[],"comments":null,"title":"timeEnd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[39,55]}},{"kind":null,"children":[],"comments":null,"title":"clear","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]},null]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[42,43]}}]}+{"reExports":[],"name":"Effect.Class.Console","comments":null,"declarations":[{"kind":null,"children":[],"comments":null,"title":"log","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[9,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[9,51]}},{"kind":null,"children":[],"comments":null,"title":"logShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[12,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[12,62]}},{"kind":null,"children":[],"comments":null,"title":"warn","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[15,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[15,52]}},{"kind":null,"children":[],"comments":null,"title":"warnShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[18,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[18,63]}},{"kind":null,"children":[],"comments":null,"title":"error","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[21,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[21,53]}},{"kind":null,"children":[],"comments":null,"title":"errorShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[24,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[24,64]}},{"kind":null,"children":[],"comments":null,"title":"info","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[27,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[27,52]}},{"kind":null,"children":[],"comments":null,"title":"infoShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[30,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[30,63]}},{"kind":null,"children":[],"comments":null,"title":"debug","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[33,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[33,53]}},{"kind":null,"children":[],"comments":null,"title":"debugShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]}]},null]},null]}},"sourceSpan":{"start":[36,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[36,64]}},{"kind":null,"children":[],"comments":null,"title":"time","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[39,52]}},{"kind":null,"children":[],"comments":null,"title":"timeLog","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[42,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[42,55]}},{"kind":null,"children":[],"comments":null,"title":"timeEnd","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[45,55]}},{"kind":null,"children":[],"comments":null,"title":"clear","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["m",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Effect","Class"],"MonadEffect"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"m"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeVar","contents":"m"},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]},null]}},"sourceSpan":{"start":[48,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs","end":[48,43]}}]}
tests/purs/publish/basic-example/output/Effect.Console/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Effect.Console","comments":null,"declarations":[{"kind":null,"children":[],"comments":"Write a message to the console.\n","title":"log","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[9,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[11,17]}},{"kind":null,"children":[],"comments":"Write a value to the console, using its `Show` instance to produce a\n`String`.\n","title":"logShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[15,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[15,48]}},{"kind":null,"children":[],"comments":"Write an warning to the console.\n","title":"warn","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[19,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[21,17]}},{"kind":null,"children":[],"comments":"Write an warning value to the console, using its `Show` instance to produce\na `String`.\n","title":"warnShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[25,49]}},{"kind":null,"children":[],"comments":"Write an error to the console.\n","title":"error","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[31,17]}},{"kind":null,"children":[],"comments":"Write an error value to the console, using its `Show` instance to produce a\n`String`.\n","title":"errorShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[35,50]}},{"kind":null,"children":[],"comments":"Write an info message to the console.\n","title":"info","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[41,17]}},{"kind":null,"children":[],"comments":"Write an info value to the console, using its `Show` instance to produce a\n`String`.\n","title":"infoShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[45,49]}},{"kind":null,"children":[],"comments":"Start a named timer.\n","title":"time","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[49,45]}},{"kind":null,"children":[],"comments":"Print the time since a named timer started in milliseconds.\n","title":"timeLog","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[52,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[52,48]}},{"kind":null,"children":[],"comments":"Stop a named timer and print time since it started in milliseconds.\n","title":"timeEnd","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[55,48]}},{"kind":null,"children":[],"comments":"Clears the console\n","title":"clear","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[58,36]}}]}+{"reExports":[],"name":"Effect.Console","comments":null,"declarations":[{"kind":null,"children":[],"comments":"Write a message to the console.\n","title":"log","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[9,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[11,17]}},{"kind":null,"children":[],"comments":"Write a value to the console, using its `Show` instance to produce a\n`String`.\n","title":"logShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[15,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[15,48]}},{"kind":null,"children":[],"comments":"Write an warning to the console.\n","title":"warn","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[19,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[21,17]}},{"kind":null,"children":[],"comments":"Write an warning value to the console, using its `Show` instance to produce\na `String`.\n","title":"warnShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[25,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[25,49]}},{"kind":null,"children":[],"comments":"Write an error to the console.\n","title":"error","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[29,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[31,17]}},{"kind":null,"children":[],"comments":"Write an error value to the console, using its `Show` instance to produce a\n`String`.\n","title":"errorShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[35,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[35,50]}},{"kind":null,"children":[],"comments":"Write an info message to the console.\n","title":"info","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[39,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[41,17]}},{"kind":null,"children":[],"comments":"Write an info value to the console, using its `Show` instance to produce a\n`String`.\n","title":"infoShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[45,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[45,49]}},{"kind":null,"children":[],"comments":"Write an debug message to the console.\n","title":"debug","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[49,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[51,17]}},{"kind":null,"children":[],"comments":"Write an debug value to the console, using its `Show` instance to produce a\n`String`.\n","title":"debugShow","info":{"declType":"value","type":{"annotation":[],"tag":"ForAll","contents":["a",{"annotation":[],"tag":"ConstrainedType","contents":[{"constraintAnn":[],"constraintClass":[["Data","Show"],"Show"],"constraintArgs":[{"annotation":[],"tag":"TypeVar","contents":"a"}],"constraintKindArgs":[],"constraintData":null},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"a"}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}]},null]}},"sourceSpan":{"start":[55,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[55,50]}},{"kind":null,"children":[],"comments":"Start a named timer.\n","title":"time","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[59,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[59,45]}},{"kind":null,"children":[],"comments":"Print the time since a named timer started in milliseconds.\n","title":"timeLog","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[62,48]}},{"kind":null,"children":[],"comments":"Stop a named timer and print time since it started in milliseconds.\n","title":"timeEnd","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"String"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}]}},"sourceSpan":{"start":[65,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[65,48]}},{"kind":null,"children":[],"comments":"Clears the console\n","title":"clear","info":{"declType":"value","type":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Effect"],"Effect"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Data","Unit"],"Unit"]}]}},"sourceSpan":{"start":[68,1],"name":"../../../support/bower_components/purescript-console/src/Effect/Console.purs","end":[68,36]}}]}
tests/purs/publish/basic-example/output/Prelude/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Prelude","comments":null,"declarations":[]}+{"reExports":[],"name":"Prelude","comments":"`Prelude` is a module that re-exports many other foundational modules from the `purescript-prelude` library\n(e.g. the Monad type class hierarchy, the Monoid type classes, Eq, Ord, etc.).\n\nTypically, this module will be imported in most other libraries and projects as an open import.\n\n```\nmodule MyModule where\n\nimport Prelude -- open import\n\nimport Data.Maybe (Maybe(..)) -- closed import\n```\n","declarations":[]}
tests/purs/publish/basic-example/output/Prim.Int/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Prim.Int","comments":"The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers.","declarations":[{"kind":null,"children":[],"comments":"Compiler solved type class for adding type-level `Int`s.\n","title":"Add","info":{"fundeps":[[["left","right"],["sum"]],[["left","sum"],["right"]],[["right","sum"],["left"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["sum",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for comparing two type-level `Int`s.\nProduces an `Ordering`.\n","title":"Compare","info":{"fundeps":[[["left","right"],["ordering"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}],["ordering",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for multiplying type-level `Int`s.\n","title":"Mul","info":{"fundeps":[[["left","right"],["product"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["product",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null}]}+{"reExports":[],"name":"Prim.Int","comments":"The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers.","declarations":[{"kind":null,"children":[],"comments":"Compiler solved type class for adding type-level `Int`s.\n","title":"Add","info":{"fundeps":[[["left","right"],["sum"]],[["left","sum"],["right"]],[["right","sum"],["left"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["sum",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for comparing two type-level `Int`s.\nProduces an `Ordering`.\n","title":"Compare","info":{"fundeps":[[["left","right"],["ordering"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}],["ordering",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for multiplying type-level `Int`s.\n","title":"Mul","info":{"fundeps":[[["left","right"],["product"]]],"arguments":[["left",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["right",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["product",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null},{"kind":null,"children":[],"comments":"Compiler solved type class for converting a type-level `Int` into a type-level `String` (i.e. `Symbol`).\n","title":"ToString","info":{"fundeps":[[["int"],["string"]]],"arguments":[["int",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Int"]}],["string",{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Symbol"]}]],"declType":"typeClass","superclasses":[]},"sourceSpan":null}]}
− tests/purs/publish/basic-example/output/Type.Data.Row/docs.json
@@ -1,1 +0,0 @@-{"reExports":[],"name":"Type.Data.Row","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Row"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},"keyword":"data"},"children":[{"comments":null,"title":"RProxy","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[22,17],"name":"../../../support/bower_components/purescript-prelude/src/Type/Data/Row.purs","end":[22,25]}}],"comments":"A proxy data type whose type parameter is a type of kind `Row Type` (a row\nof types).\n\n**Deprecated as of v0.14.0 PureScript release**: use `Type.Proxy` instead.\n\nCommonly used for specialising a function with a quantified type.\nFor example, suppose we have an identity function for records of type:\n```purescript\nrecordIdentity :: forall row . RProxy row -> Record row -> Record row\nrecordIdentity _ rec = rec\n```\nThen applying this function to an `RProxy` with a specialised type\nallows us to specify a concrete type for `row`:\n```purescript\n:t recordIdentity (Proxy :: Proxy ( x :: Int, y :: Int ))\n{ x :: Int, y :: Int } -> { x :: Int, y :: Int }\n```\nHere `row` has been specialised to `( x :: Int, y :: Int )`.\n","title":"RProxy","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["row",null]]},"sourceSpan":{"start":[22,1],"name":"../../../support/bower_components/purescript-prelude/src/Type/Data/Row.purs","end":[22,25]}}]}
− tests/purs/publish/basic-example/output/Type.Data.RowList/docs.json
@@ -1,1 +0,0 @@-{"reExports":[],"name":"Type.Data.RowList","comments":null,"declarations":[{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim","RowList"],"RowList"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},"keyword":"data"},"children":[{"comments":null,"title":"RLProxy","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[8,22],"name":"../../../support/bower_components/purescript-prelude/src/Type/Data/RowList.purs","end":[8,31]}}],"comments":"A proxy to carry information about a rowlist.\n**Deprecated as of v0.14.0 PureScript release**: use `Type.Proxy` instead.\n","title":"RLProxy","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["rowlist",null]]},"sourceSpan":{"start":[8,1],"name":"../../../support/bower_components/purescript-prelude/src/Type/Data/RowList.purs","end":[8,31]}}]}
tests/purs/publish/basic-example/output/Type.Proxy/docs.json view
@@ -1,1 +1,1 @@-{"reExports":[],"name":"Type.Proxy","comments":"The `Proxy` type and values are for situations where type information is\nrequired for an input to determine the type of an output, but where it is\nnot possible or convenient to provide a _value_ for the input.\n\nA hypothetical example: if you have a class that is used to handle the\nresult of an AJAX request, you may want to use this information to set the\nexpected content type of the request, so you might have a class something\nlike this:\n\n``` purescript\nclass AjaxResponse a where\n  responseType :: a -> ResponseType\n  fromResponse :: Foreign -> a\n```\n\nThe problem here is `responseType` requires a value of type `a`, but we\nwon't have a value of that type until the request has been completed. The\nsolution is to use a `Proxy` type instead:\n\n``` purescript\nclass AjaxResponse a where\n  responseType :: Proxy a -> ResponseType\n  fromResponse :: Foreign -> a\n```\n\nWe can now call `responseType (Proxy :: Proxy SomeContentType)` to produce\na `ResponseType` for `SomeContentType` without having to construct some\nempty version of `SomeContentType` first. In situations like this where\nthe `Proxy` type can be statically determined, it is recommended to pull\nout the definition to the top level and make a declaration like:\n\n``` purescript\n_SomeContentType :: Proxy SomeContentType\n_SomeContentType = Proxy\n```\n\nThat way the proxy value can be used as `responseType _SomeContentType`\nfor improved readability. However, this is not always possible, sometimes\nthe type required will be determined by a type variable. As PureScript has\nscoped type variables, we can do things like this:\n\n``` purescript\nmakeRequest :: URL -> ResponseType -> Aff _ Foreign\nmakeRequest = ...\n\nfetchData :: forall a. (AjaxResponse a) => URL -> Aff _ a\nfetchData url = fromResponse <$> makeRequest url (responseType (Proxy :: Proxy a))\n```\n","declarations":[{"kind":{"kind":{"annotation":[],"tag":"ForAll","contents":["k",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},null]},"keyword":"data"},"children":[{"comments":null,"title":"Proxy","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[53,14],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[53,21]}}],"comments":"Proxy type for all `kind`s.\n","title":"Proxy","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null]]},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[53,21]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"ParensInType","contents":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},"keyword":"data"},"children":[{"comments":null,"title":"Proxy2","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[58,15],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[58,23]}}],"comments":"Value proxy for kind `Type -> Type` types.\n**Deprecated as of v0.14.0 PureScript release**: use `Proxy` instead.\n","title":"Proxy2","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["f",null]]},"sourceSpan":{"start":[58,1],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[58,23]}},{"kind":{"kind":{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},"keyword":"data"},"children":[{"comments":null,"title":"Proxy3","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[62,41],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[62,49]}}],"comments":"Value proxy for kind `Type -> Type -> Type` types.\n**Deprecated as of v0.14.0 PureScript release**: use `Proxy` instead.\n","title":"Proxy3","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["a",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]}]}]]},"sourceSpan":{"start":[62,1],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[62,49]}}]}+{"reExports":[],"name":"Type.Proxy","comments":"The `Proxy` type and values are for situations where type information is\nrequired for an input to determine the type of an output, but where it is\nnot possible or convenient to provide a _value_ for the input.\n\nA hypothetical example: if you have a class that is used to handle the\nresult of an AJAX request, you may want to use this information to set the\nexpected content type of the request, so you might have a class something\nlike this:\n\n``` purescript\nclass AjaxResponse a where\n  responseType :: a -> ResponseType\n  fromResponse :: Foreign -> a\n```\n\nThe problem here is `responseType` requires a value of type `a`, but we\nwon't have a value of that type until the request has been completed. The\nsolution is to use a `Proxy` type instead:\n\n``` purescript\nclass AjaxResponse a where\n  responseType :: Proxy a -> ResponseType\n  fromResponse :: Foreign -> a\n```\n\nWe can now call `responseType (Proxy :: Proxy SomeContentType)` to produce\na `ResponseType` for `SomeContentType` without having to construct some\nempty version of `SomeContentType` first. In situations like this where\nthe `Proxy` type can be statically determined, it is recommended to pull\nout the definition to the top level and make a declaration like:\n\n``` purescript\n_SomeContentType :: Proxy SomeContentType\n_SomeContentType = Proxy\n```\n\nThat way the proxy value can be used as `responseType _SomeContentType`\nfor improved readability. However, this is not always possible, sometimes\nthe type required will be determined by a type variable. As PureScript has\nscoped type variables, we can do things like this:\n\n``` purescript\nmakeRequest :: URL -> ResponseType -> Aff _ Foreign\nmakeRequest = ...\n\nfetchData :: forall a. (AjaxResponse a) => URL -> Aff _ a\nfetchData url = fromResponse <$> makeRequest url (responseType (Proxy :: Proxy a))\n```\n","declarations":[{"kind":{"kind":{"annotation":[],"tag":"ForAll","contents":["k",{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeApp","contents":[{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Function"]},{"annotation":[],"tag":"TypeVar","contents":"k"}]},{"annotation":[],"tag":"TypeConstructor","contents":[["Prim"],"Type"]}]},null]},"keyword":"data"},"children":[{"comments":null,"title":"Proxy","info":{"arguments":[],"declType":"dataConstructor"},"sourceSpan":{"start":[53,14],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[53,21]}}],"comments":"Proxy type for all `kind`s.\n","title":"Proxy","info":{"roles":["Phantom"],"declType":"data","dataDeclType":"data","typeArguments":[["a",null]]},"sourceSpan":{"start":[53,1],"name":"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs","end":[53,21]}}]}
tests/purs/publish/basic-example/output/cache-db.json view
@@ -1,1 +1,1 @@-{"Control.Applicative":{"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs":["2021-07-03T14:03:20Z","21f5d40b228f5126f7a3d67fc7aa8a417c0a6a620409822681eec6baa53ed06a7e552cd9e43026bb3ea3154ad595436d6bd393c4258a49cb989ab28696882317"]},"Control.Apply":{"../../../support/bower_components/purescript-prelude/src/Control/Apply.js":["2021-07-03T14:03:20Z","1e78805dbc93c1187784f2de1f51e07c55deabaeb3aed66071669970ed6636303a9dc02303acd640394ddd66e40923b3490322f5311f69b3bc16df150e0f8b18"],"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs":["2021-07-03T14:03:20Z","58c4bdc7b079897881ace66c2153576f33e366acff3200ad987277ca80b61109d1d37887804727970641371d7caa1807e38a8ae9e073376fcadd5e37280e69b6"]},"Control.Bind":{"../../../support/bower_components/purescript-prelude/src/Control/Bind.js":["2021-07-03T14:03:20Z","96d60a011250a675aeea6e506be5010092f518a442a8b58ac504726f812b0428c78dc04e0d59a9cb3353e09559ac9066b6608362903d73e2be28ec10446ff971"],"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs":["2021-07-03T14:03:20Z","501a9e19d085418d5efaf678ee7025094de2a0fe08cbe07e84ac64de99510ed2368e6f4b2950e9feabfcd7dbe5ac72aa143316eabdec00cb71dd6c879b57dda9"]},"Control.Category":{"../../../support/bower_components/purescript-prelude/src/Control/Category.purs":["2021-07-03T14:03:20Z","ac03f0fa4648a5e86738411b13df456f5f81b72071640f075b00aa59e403b2ce14914d3426054d57c74bfe352f1b53fe1ba50d5c9eb68ed74fa977d885e07ef9"]},"Control.Monad":{"../../../support/bower_components/purescript-prelude/src/Control/Monad.purs":["2021-07-03T14:03:20Z","8ef199c4ddc3012576405a7d5c6430baeee4cfb6b0b726d134f819ecad61385e62bd6cb8403ba322f25fbe588d4ef1c609dfce2792af759c7237dee2e336e1d6"]},"Control.Semigroupoid":{"../../../support/bower_components/purescript-prelude/src/Control/Semigroupoid.purs":["2021-07-03T14:03:20Z","f5b1e9fdd81471d37f763b7fff8bd94f2111fd9ad6092bc925e409d5c69261860045230cde5c95ebbb3141acce54372bcf4d01c9b044fd59959822c9576135e8"]},"Data.Boolean":{"../../../support/bower_components/purescript-prelude/src/Data/Boolean.purs":["2021-07-03T14:03:20Z","aa81cf83948d1c45051dcfb835b0caef7a8ed8a39c58d8126f4efde1973880dbcd169d36bbe8c82a62586c386810bf0824f018674a93c606e43bc451fb6c3819"]},"Data.BooleanAlgebra":{"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs":["2021-07-03T14:03:20Z","c45582c15f1a97822463b5f89c27bc20379c0b3ef6b3f33e6b78808fac977251bc850bb96d0fe56326a111ff2068245582fc7b87564f2d8e119f1b9e3bd0eede"]},"Data.Bounded":{"../../../support/bower_components/purescript-prelude/src/Data/Bounded.js":["2021-07-03T14:03:20Z","f5e5e494d0a84d0f809ddcf220c03b4f5daca935d19248657f4bd357eb0e7ab8c7a46bf02747333823717e0a4b93e3bf3d18b9b32df06003fe4bca2af37ec63a"],"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs":["2021-07-03T14:03:20Z","8692c6f6a72b2723e5bd841797996ce1535d21e5014ff0bc6ec638e69058dcf7cb724669f0a6589858dc97d609bd6b809cecabce4035bc21499007be61462a2e"]},"Data.Bounded.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Bounded/Generic.purs":["2021-07-03T14:03:20Z","15f4f3499dd9c2a1f37345357db2f131cc57e37a4ddfaa8497dabd3d123abd8b9670bdd3910b84b6c44c8b63bf1873af783adb1edc8455985f244b6ecbef733b"]},"Data.CommutativeRing":{"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs":["2021-07-03T14:03:20Z","7bd637d8738d84a768df584ce50ef6fa43730daf6ad2265239d56bdb2444c7d7286443aa8824744a7367034f0ec494113349d458d4927bb83b883ca78598baab"]},"Data.DivisionRing":{"../../../support/bower_components/purescript-prelude/src/Data/DivisionRing.purs":["2021-07-03T14:03:20Z","1f3c74ecd87798ace30371f036ef1590f7e4dbc5be05f51162f9b3700d61c0befd6a5b53ace34626103e500043de3b67225de2c442841106f6d8960658355aae"]},"Data.Eq":{"../../../support/bower_components/purescript-prelude/src/Data/Eq.js":["2021-07-03T14:03:20Z","870ab9e0ac6742f60a0df27be1c97669a419eb1e3b2e2c97b77e14a62a0d4893eb5c391141697c6e5a6ec34d00f371d8059af9b9c1f9ace1131ea2fcfcd4b6d0"],"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs":["2021-07-03T14:03:20Z","bdafd301b3114fba255524570fb82fe2ad78a035c78b05d1c6022685b7942fb6d9928c217966fa2813bd816e508a2255f2d14e2b8429904e3919123d5671d4e4"]},"Data.Eq.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Eq/Generic.purs":["2021-07-03T14:03:20Z","88d9841c3e55b1063721bc8ff168aa8b53cd3581a8c3ffee6ed71a96ba4d2d20b7b454cb0e7f13b2fa7a6bcaf4ca0dfc609ce624f5ad74eece1e13a93b0a121d"]},"Data.EuclideanRing":{"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.js":["2021-07-03T14:03:20Z","365aedcfc333a2122dd3c83b2e48d15777b90e4a6eb68f16f9cdf63a570b85bc544b60623822610b00447ffbf5dd67141170765ce24d0f70f07a81f4a3528c00"],"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs":["2021-07-03T14:03:20Z","198f124f2bd8ff1babd899c303a04f2120711393c4468e8d27fafb02e9eb5b0ef259ecb6ebd41163061ccc9609f4b2ef40ffb76642f2ecffc31911cce88a5c52"]},"Data.Field":{"../../../support/bower_components/purescript-prelude/src/Data/Field.purs":["2021-07-03T14:03:20Z","21c8a682ad74b9389e1c538ca1dbc5cc4da34b13945a1bd11812631f8f56e723e65f9452eba5b43ea8209f88c57e8566529667673b6b78ade1a08350a28b04cc"]},"Data.Function":{"../../../support/bower_components/purescript-prelude/src/Data/Function.purs":["2021-07-03T14:03:20Z","6668b4889e35fbfdabe9ad5754101c206e6dc73c8ea550b940f8ca612553a5ff2f4375165f0cd7865929b21741872f802960617f71f559b0563ae7aeec259ff9"]},"Data.Functor":{"../../../support/bower_components/purescript-prelude/src/Data/Functor.js":["2021-07-03T14:03:20Z","6b4491392ce9a543d059bd855bfbfb7008665d155987d300ed18c3ae602d688a3aa099f716409fb3fd9b62751d07b359e94d3f998954874ff11c169f2ef80e74"],"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs":["2021-07-03T14:03:20Z","2ac2193dc9dc8aa9a53af41bda6e5b941af2df58da79fea31f4659a210f8b65b6b9d2d1467f82058cabe46c5ce371b516aaf256e9686245cdb427d62d79dd8b4"]},"Data.Generic.Rep":{"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs":["2021-07-03T14:03:20Z","4017a47f7b3f622a3c219f5b467bdc3fcbfe0b5c5fc2036adfdca18d77adf3702e9f0c149c20a2d009ec1cebf4c7ce57779bbe6cd581c031017ba7366e140db6"]},"Data.HeytingAlgebra":{"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.js":["2021-07-03T14:03:20Z","6e2a79c536fc01c3ad94d911f0d15f2eff726f782c183c8b2b653544f3fdfa89367ab0d077fc2fe0c6f6ba654197d7e9336eb176779ee75e4f23ba6c2a60df7b"],"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs":["2021-07-03T14:03:20Z","696c3b30b34afff92cf3496f35128ba7d7a6ef83c03c436a2376fc53ce418680684e4dea0a6096a7be0d3ff0f1aed10546ea186e74aee5460f391de81025681b"]},"Data.HeytingAlgebra.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra/Generic.purs":["2021-07-03T14:03:20Z","ea49a37bf16af73cb930d0eb573bca8cc8e63de0a796c504f531f05d503976a59f464fa5a039a2ae9b486c9ba70857008bfb06acaaeaad6ee0f9f429355043e2"]},"Data.Monoid":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs":["2021-07-03T14:03:20Z","28654783a32a3d39419da896cebec8cf7341080ec58dbd539d242aa763da149bd1876b412c7ccab01c7a45c6a9b2be2299dd5bfab4ec8f5d84ad951c17d79575"]},"Data.Monoid.Additive":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Additive.purs":["2021-07-03T14:03:20Z","514e26851127fb9b52c618a36f17758513d9a7ea6724866b208e2c2447c3c3b3a9a18218b715b765e5e1e00908e2ebc0d9f2e67171ab3e46543a01508b54de67"]},"Data.Monoid.Conj":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Conj.purs":["2021-07-03T14:03:20Z","441eb08d322aa39654f68fe39676ba5fe470252adc4da087c590245ff7b0b624885c57ade6e66f24485862873767198678a219afbd7c2fc68f2ca59978d7d9c2"]},"Data.Monoid.Disj":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Disj.purs":["2021-07-03T14:03:20Z","f38cea70c5a7216b6b17c796dfbc8b08d9f05bed22d81d3784322f9f06f127435b4c9009a2027c24efc998c781796b9007bc70bc3bd1eee935b1a9695077bc7a"]},"Data.Monoid.Dual":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Dual.purs":["2021-07-03T14:03:20Z","54058218c4c5323d42e95d54a1c64b9e2ded8afdaeef2f846ef123bd4fd6772551e2158a6a9802ca327bbc4fb995f4fd5d416fd59c7a6efc8f8fe9bc5e7dc709"]},"Data.Monoid.Endo":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Endo.purs":["2021-07-03T14:03:20Z","543f16c8df42353334deddd7e25a58340aaa3f4a902a997d6b08e3128ca0afb82b3ac720e8ca8d4475cfc063906df1439afd3f2e22f7684aeb9ee0bc2992e774"]},"Data.Monoid.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Generic.purs":["2021-07-03T14:03:20Z","9e2ef0cf0469c1e798f8767cb472ee1b0103dfd6b08ed0a777c89d5043358b70cf14c2784ea59f05795f648daf80e11b2150fa89a05bc8c0afa6dafeb2fc09ac"]},"Data.Monoid.Multiplicative":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Multiplicative.purs":["2021-07-03T14:03:20Z","f0c40f939ed3a3f00712fc7485926733668101c201e5d57e19d72ce6be84455b7b2d7360d747154a9d071df9b72e4e5ad2ac2a36db093a1b702fed4e6f4de9e3"]},"Data.NaturalTransformation":{"../../../support/bower_components/purescript-prelude/src/Data/NaturalTransformation.purs":["2021-07-03T14:03:20Z","6b9fc42ec524a517d464dea99867c64345cdbcbada4260a772373a956961ad1c9a4a3a4f8ed4a0c7c7f3e36120068954141841c5d6bdc4e5898ea06435104bb7"]},"Data.Newtype":{"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs":["2021-02-26T17:17:28Z","8b78cd4a44e6d2dea3b8638744f2dc3af50cbfc93f738a4d3e76c456bd8a968b4ba6d91cd086feea4ed84012d30272c00cb72624439bc1d8c32d7914dde4fe88"]},"Data.Ord":{"../../../support/bower_components/purescript-prelude/src/Data/Ord.js":["2021-07-03T14:03:20Z","240fa1f006d30de7c06e22af4c857cc5ea6def4ad72635a7e2fe12aff5a9281245cb97f463417b0518a64c51e339758aabaf787dcfea2bbf635f77a32eb34ce9"],"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs":["2021-07-03T14:03:20Z","4e2401b0172e2e37ad3717daf74de32fab552b627f227d1353ba12cf4066459045ce005e6ffaeccd9825c72b4fdcd873e4a775305806194d17d830a8cf6f017f"]},"Data.Ord.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Ord/Generic.purs":["2021-07-03T14:03:20Z","d566cfa79ec03e335f632d3edc3b913081583188d8496897c1b0904c1895525caeb5b0464b76d40ae5ef79e5c7b516ad061c1d98aa6e1c649f555be4c839087e"]},"Data.Ordering":{"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs":["2021-07-03T14:03:20Z","370fa82c22cb127bc8cae64f207b5dd887e5f69e33ce4261d7e1364ec658105cebfc8a77d202ece9782f1d40fd443591a2d8084bc0499c696b29c05246c19f8c"]},"Data.Ring":{"../../../support/bower_components/purescript-prelude/src/Data/Ring.js":["2021-07-03T14:03:20Z","66ebcf378593bad2e11a72cc6183fa0303ccd492930c0cfa2f7757ec701f40746b9d8535c23ac113622a8658c4c769ab8b4bd6aa9623c5129ac6e2948e5f5279"],"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs":["2021-07-03T14:03:20Z","f4f536b8cde483e84f2fc8691133c161d3f6915a2ae07c25cc35e950ba06aa3d2387d2f504a76cb24bdae94c488c142a7aa679ea83448cdc1bb215ebe811cc2b"]},"Data.Ring.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Ring/Generic.purs":["2021-07-03T14:03:20Z","8c94b1a5765b99950600e690e01e3da65cd7e43fe78f651f8531c45d41775572af47e62f21705857c82ae52251626c34f0f41180ee0563115f749c7bc0459324"]},"Data.Semigroup":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.js":["2021-07-03T14:03:20Z","468cd718b90e3f314596d37946581b92b86a694d29187fb316a39961c29e923c929a389fb4aad34ea6738571f1fe10d9b6277fa95eff25a1f0411f01de6b6f66"],"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs":["2021-07-03T14:03:20Z","574ab45d3a0aff3ca23fe551b1319b4814382544e8be486685f2c16763cb18f96383cf652dfeca3b11f798873f083558acfde350843a014a20540eb0022a0dd4"]},"Data.Semigroup.First":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup/First.purs":["2021-07-03T14:03:20Z","8ff357056284af9050954e7695babcc76f5f632019b66f635a49502170508a37b2cb20a2e863f022bf077726480d2cc32951fb910c80559806e50830f25e884e"]},"Data.Semigroup.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup/Generic.purs":["2021-07-03T14:03:20Z","8c07803971e03a3c3d4a617198eae5a3e825c411fd17af68eee57571717a2301eaf5ec5bd34bfddf14da1f1c40d780ab9538d02f22d1d19117135388c848ca89"]},"Data.Semigroup.Last":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup/Last.purs":["2021-07-03T14:03:20Z","75b3660341f9c0570031d2304c83eb8592098e2d96577c030ae969b3b958d00b21234c2c836377e7b338e4323fa4aa0c97a4a8abb7ed49e2741907a411eb0b08"]},"Data.Semiring":{"../../../support/bower_components/purescript-prelude/src/Data/Semiring.js":["2021-07-03T14:03:20Z","174ae46636cbd6ebdb38e1bd71eb097e005e63dd199b3a950d4576219ffec953604496332030d3656bfa10ee8d8674db94ef0dde176323387d5240cbbb797d90"],"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs":["2021-07-03T14:03:20Z","d1c20317d4159abf489c61e0f4e00fdf18c8308b90378a93459ae774bdd554e1dc73ced08bd19acc67ecd08803e62b0209f61999845c00e94e19aea48f2b6cda"]},"Data.Semiring.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs":["2021-07-03T14:03:20Z","0717733974b6cfa8f8a18f79a3e4ae589689c392db33f8d9f03a7df4eb300246a6c4407e2e79d9335962d90b6f8384eecee2d5494c13868f9bdec106d7b48261"]},"Data.Show":{"../../../support/bower_components/purescript-prelude/src/Data/Show.js":["2021-07-03T14:03:20Z","bb184478e519c07a00aacd8d535d2b1ca0ce25d974700fb14e59aa382dc4878db0426a2f2c32a86e6fa0b8afe9afd53581bed46b2488516cbbd29a7762b3b50a"],"../../../support/bower_components/purescript-prelude/src/Data/Show.purs":["2021-07-03T14:03:20Z","007d055ef82e527f107ec351983b66fa4c1e752d57b01ccef7ebb9ebbdfb91c286f48422cf37f0910f1d8de8df3ddf8dd710438fc0517752a29326524aa671a4"]},"Data.Show.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.js":["2021-07-03T14:03:20Z","698d6c49caf0d69e7aec331be71ea9595ecea3899cb63770ee3ffbeec4ec8c61ae39624ac2deac02983915f0bc0ac8ea74397e8ffa1b5de0bf965ec00586eb48"],"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs":["2021-07-03T14:03:20Z","d8236af3f7330bf83cfc41a027e6c03077f6897b4db3cc0ea3580c0a181997fce9583625b25b396cfe8bb23530ad9f3713a102e2d4d824ead28883c5f378a39b"]},"Data.Symbol":{"../../../support/bower_components/purescript-prelude/src/Data/Symbol.js":["2021-07-03T14:03:20Z","84e148367cf52dab2648ec33239852a09bc602c9c431e877d3e8eb9515666b5432c1b3dc8aaa3108a38693e5398fd768ad19a1b2a00fddfebd0cedd7e2a6fee3"],"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs":["2021-07-03T14:03:20Z","c1f729d73531599e4bfb2c82db000d0fd0ddd4edab6117969fdcf2e20a9d5a57bd492931deb5115f78094e36baca05aa05ef66dbac79226ed7cfec71d22794d8"]},"Data.Unit":{"../../../support/bower_components/purescript-prelude/src/Data/Unit.js":["2021-07-03T14:03:20Z","aba4d9339c8fcc53eacc00bf59f4340c3640b4afcb31b0b55f94b956941cde21e4c48844192992b5332f2de4b47038acc31ac4ff65706e696895667b416bff5c"],"../../../support/bower_components/purescript-prelude/src/Data/Unit.purs":["2021-07-03T14:03:20Z","a4bfca3ddacfc9d1e09019819fd94325c0fe756cb6d7e35c07a8bb6bb6c8bc6cca55a22b72f641b9fac6e5c09cae29cec932c847bdb34298310a161ee3fcfc92"]},"Data.Void":{"../../../support/bower_components/purescript-prelude/src/Data/Void.purs":["2021-07-03T14:03:20Z","c74f3de3f53a0bcd25fe729a9ef5ed8e9cc4f1b55e3b51aa04a2aa3797b4138b34705afc6eeed6a5c8b37dfdcc7eb0975e22c0c2514f482b0fb8c5880fdc7dd1"]},"Effect":{"../../../support/bower_components/purescript-effect/src/Effect.js":["2021-07-03T14:04:30Z","2723b0a6b35c03d5b266ee3c0c8218eb7182419ed3d2cccb9000799c61d0d8ebe9fe9027368538b2ce94832a03ff44d12ea408c92ff5dad452959f95b8852691"],"../../../support/bower_components/purescript-effect/src/Effect.purs":["2021-07-03T14:04:30Z","25ea461900466a6aade8a56c20921d46eb037a71efb12c4265dd378e760843e5793efb9f7cb47322511459136d9d4ecd6d09e5a089a432d96ef4af4530ad8e8d"]},"Effect.Class":{"../../../support/bower_components/purescript-effect/src/Effect/Class.purs":["2021-07-03T14:04:30Z","47e0114539e25826ffba341faf99133ed2499027f0955fa606d563d3504c6b41dc9d425dfa619c0c83b5fc2ab8dbb3c1bf2166b5980c5674fb93560c9b80d585"]},"Effect.Class.Console":{"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs":["2021-07-03T14:04:43Z","bbad6672678cdca9afe6485d7284bbd73468c0bce5855aefc3a10403fe280562a8630b2e054bf292098447d606e337c63b6fcddc900a6077882cb4d08e0d6980"]},"Effect.Console":{"../../../support/bower_components/purescript-console/src/Effect/Console.js":["2021-07-03T14:04:43Z","44c6f6436b411848edb9c109a09930a0677fd03ca1e4efc51039ecc9e8902245312cef43474c7402abe4b3e61531cd93109b2629965313b821a87a381651f229"],"../../../support/bower_components/purescript-console/src/Effect/Console.purs":["2021-07-03T14:04:43Z","e52098663fc92054646485e43e7539b022a66e2275131838b80ef06f50ff4561b9f9fd1462eb31d67852ca7ee368fe8ae3d21e523291cb1c391b6eb402e13dd8"]},"Effect.Uncurried":{"../../../support/bower_components/purescript-effect/src/Effect/Uncurried.js":["2021-07-03T14:04:30Z","d0cbe4038161c4fd08517ce9034e85f4bbe6e6e5476afbdde59c7004a682504ec5f9366e2e1e854be2751b776e5fcf1f4b87b3842fec1c30ed7d06337a6e5b8b"],"../../../support/bower_components/purescript-effect/src/Effect/Uncurried.purs":["2021-07-03T14:04:30Z","a948cb1cab11f5019fe20dd697b5c6e248c3b29c7ab332c2cb9d792cfcb58021a77c0f4f71e1c8d7c0b3b9cb18bd1497a0d2f40680926390f3303ecb1fe25beb"]},"Effect.Unsafe":{"../../../support/bower_components/purescript-effect/src/Effect/Unsafe.js":["2021-07-03T14:04:30Z","57cc45d58163f28933febdee08c231d48dc887ae8005d95e34b0bef3161f841cde50fedd24cd94b128541d42b7f7ee05a7ad9dd40170b0e8dbcbff8f4091c7a7"],"../../../support/bower_components/purescript-effect/src/Effect/Unsafe.purs":["2021-07-03T14:04:30Z","c112c559df0f177472e96655b09165d5535f68caddc2b419b4cdfe796af19b962b0659cb609a2ce501002da7de34e66592b5491ebe6f538824c2db8a1e800ea7"]},"Main":{"src/Main.purs":["2021-10-25T20:49:21.464382127Z","55bdd6dd11fb1679cb11793dd2996de21972f7aa53826557273bd649004f5907ff8cf6dff840718a12084c421529c9da7d70f698689d3923ab4ae3d608591c66"]},"Prelude":{"../../../support/bower_components/purescript-prelude/src/Prelude.purs":["2021-07-03T14:03:20Z","2d4e4e195e74c97df4092d1c35621f9e077c74540e52cae6001c9400ae44984d8a0a7e241779db4dc8427743fdf8bccdaad4e921ae6a09ac3fcf7d6207ac569e"]},"Record.Unsafe":{"../../../support/bower_components/purescript-prelude/src/Record/Unsafe.js":["2021-07-03T14:03:20Z","7a5cb6ffbca976bcc2efba4644930791ad1f76c8f35f1f04394df5e912d5d4cedc49c389f692804ba4bdec5e49142f55a15243ece9295b739a73542198f403ae"],"../../../support/bower_components/purescript-prelude/src/Record/Unsafe.purs":["2021-07-03T14:03:20Z","af8a7c83127f5e61853ad0e572be799c04e321562a375d51ab133706ac6a6777e169b057f01a709ad7aae2d8c7a5ae8daa28eae8793c4fe92e2e8f0cfaecf870"]},"Safe.Coerce":{"../../../support/bower_components/purescript-safe-coerce/src/Safe/Coerce.purs":["2021-02-26T17:15:34Z","595abade13e21ed7893a92b338d9e7c7bf56e9067d51ca25c387d6d93a1c5542925f062e282602e89476a45501645c76dbd57eac31cc4e5c1cf341e2902beb89"]},"Type.Data.Row":{"../../../support/bower_components/purescript-prelude/src/Type/Data/Row.purs":["2021-07-03T14:03:20Z","d82930c58e1559312fc1062cf59abfd63796c82075d25d207517c3c46a055c0313d5be1dc08154643ca418db295a9d77ec0666d3cea8d82e2682e99919f37500"]},"Type.Data.RowList":{"../../../support/bower_components/purescript-prelude/src/Type/Data/RowList.purs":["2021-07-03T14:03:20Z","642d9e171cfabd6fe073cd907642b07777a6dbe9e9e79d53d7ed07078e521b02df3abed41c636cc7d4cbe4c6143655e8a0bac511627957e24bede074aabd24fb"]},"Type.Proxy":{"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs":["2021-07-03T14:03:20Z","9395b73275a30eaf7268d298410b7927999bcf7535bd6589f17498e388669897caf1ac40f0fcc5fb437e88864de27907a50dba7f35b3d26a7ddd974ed7473160"]},"Unsafe.Coerce":{"../../../support/bower_components/purescript-unsafe-coerce/src/Unsafe/Coerce.js":["2021-07-17T18:26:45Z","789f61aa039d9354d31b4f2bf569a2d601512a27d016f692a847fb527938288be14ca8038e968897085f2d94b582516f10562dee565693ab75219666e2c0e781"],"../../../support/bower_components/purescript-unsafe-coerce/src/Unsafe/Coerce.purs":["2021-07-17T18:26:45Z","04b214d9cbbf0c438bb2af4b25f8db5d04f247059241982f718c6d83322c3180f0eced0eb5c410860dcdb35650e9129a1cffe87f7279308cc4cf6c6570bba74f"]}}+{"Control.Applicative":{"../../../support/bower_components/purescript-prelude/src/Control/Applicative.purs":["2022-04-27T13:37:39Z","5889c8a23c34d2d9c7d1fe41df1512314055fafda79900099b37a76451fb6394dac06633caf5c206c432817a9c07b892b18c3b99d1013a298acc85a579aee2f1"]},"Control.Apply":{"../../../support/bower_components/purescript-prelude/src/Control/Apply.js":["2022-04-27T13:37:39Z","73ee829e5dfad80f1d5f957d0e52b1d069ea798919d608b4733cedda4736681ec26d7e33501428966bf213b8a344c1272f7658867780c7237baf90da4c9d5ad3"],"../../../support/bower_components/purescript-prelude/src/Control/Apply.purs":["2022-04-27T13:37:39Z","524e797c42f16dbc375aa2403a4867a5744116d9302bda790333251ccf88d773e079fb8c3af1f87eccdc0c0bbf682b932a48506ca5f51ef441832177fafd4eb0"]},"Control.Bind":{"../../../support/bower_components/purescript-prelude/src/Control/Bind.js":["2022-04-27T13:37:39Z","abbbecd9697ae2109a9b74f70bfce37c0589e0d99b10e090660e1c76a491744c84fd459c53172256c70cdaffde3f0dc1abe0464fa32b977cf71e789425ca8bfe"],"../../../support/bower_components/purescript-prelude/src/Control/Bind.purs":["2022-04-27T13:37:39Z","27f217ea2d5e4ab2745ad05b6d0aa36ee8809dc9d5c22162f722b2f003cf140bb18747f158daeca469a1083b7b054f9a6a9681d092598b3ea25cada7fe510d75"]},"Control.Category":{"../../../support/bower_components/purescript-prelude/src/Control/Category.purs":["2022-04-27T13:37:39Z","6431719d022f6d4230f338935381a7e116a18cdf80c67bdf76d87a7624518bc9fd1e4adfe45c8a59d77f07caf7c8e9faae741e99fada42455143c4fb924e7988"]},"Control.Monad":{"../../../support/bower_components/purescript-prelude/src/Control/Monad.purs":["2022-04-27T13:37:39Z","5d13918b1f360fb201125c334399566fdef398f1b44af0754cb261b6e514481b26a0d4ad892944d4a52d513c41a20702d9973be000d9e2436c4fb48940cc07ca"]},"Control.Semigroupoid":{"../../../support/bower_components/purescript-prelude/src/Control/Semigroupoid.purs":["2022-04-27T13:37:39Z","f5b1e9fdd81471d37f763b7fff8bd94f2111fd9ad6092bc925e409d5c69261860045230cde5c95ebbb3141acce54372bcf4d01c9b044fd59959822c9576135e8"]},"Data.Boolean":{"../../../support/bower_components/purescript-prelude/src/Data/Boolean.purs":["2022-04-27T13:37:39Z","aa81cf83948d1c45051dcfb835b0caef7a8ed8a39c58d8126f4efde1973880dbcd169d36bbe8c82a62586c386810bf0824f018674a93c606e43bc451fb6c3819"]},"Data.BooleanAlgebra":{"../../../support/bower_components/purescript-prelude/src/Data/BooleanAlgebra.purs":["2022-04-27T13:37:39Z","464f2df7f5bc3fc5e64cb0462c841f93fa2a609545e10f0adce637185e345aa45eed2a7e164ba648bb947168279c999ef8cd9f5dab9fce9af3b9329a8829b971"]},"Data.Bounded":{"../../../support/bower_components/purescript-prelude/src/Data/Bounded.js":["2022-04-27T13:37:39Z","8bfa62b2e886ce6d58793d840513c68cefc1fa0c4a15a5e6a0c0ee5d607fea425f8080365c0f3f421116c4362eba447617cd65a221ee1e4cc0a75610752d3b75"],"../../../support/bower_components/purescript-prelude/src/Data/Bounded.purs":["2022-04-27T13:37:39Z","36762aa05b71843e1d2f23cc64b1a17ea3acf91745de39e8723a04f3cc12f50c83e6a9b8a58c0463eaed0e93dfe3112e1f896130bab0660a5a009391f00ed468"]},"Data.Bounded.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Bounded/Generic.purs":["2022-04-27T13:37:39Z","15f4f3499dd9c2a1f37345357db2f131cc57e37a4ddfaa8497dabd3d123abd8b9670bdd3910b84b6c44c8b63bf1873af783adb1edc8455985f244b6ecbef733b"]},"Data.CommutativeRing":{"../../../support/bower_components/purescript-prelude/src/Data/CommutativeRing.purs":["2022-04-27T13:37:39Z","c8bf53bf06454a74ba3a605d100b59bb5ba9111dd20e073713422c080075555b653bcaddde078d55130e737de30ba336920a099a6016fd4158af88b1f430b631"]},"Data.DivisionRing":{"../../../support/bower_components/purescript-prelude/src/Data/DivisionRing.purs":["2022-04-27T13:37:39Z","1f3c74ecd87798ace30371f036ef1590f7e4dbc5be05f51162f9b3700d61c0befd6a5b53ace34626103e500043de3b67225de2c442841106f6d8960658355aae"]},"Data.Eq":{"../../../support/bower_components/purescript-prelude/src/Data/Eq.js":["2022-04-27T13:37:39Z","6718a356e77f3fe29c3f353f02fd94583b4edf5a0a0d7bdfdbcb046e7ef3440781aaa466ee88f12be6a72f274eb9c51d4d051673f4893fc408e9053bb8d84368"],"../../../support/bower_components/purescript-prelude/src/Data/Eq.purs":["2022-04-27T13:37:39Z","65598d7093548c9848e1c661bb778ebd402f09b4584570c09082d765997056b335bf0f05397cd788c44bb2f00b3bd2115cba2ed45033ade9ac40d91efd64301d"]},"Data.Eq.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Eq/Generic.purs":["2022-04-27T13:37:39Z","88d9841c3e55b1063721bc8ff168aa8b53cd3581a8c3ffee6ed71a96ba4d2d20b7b454cb0e7f13b2fa7a6bcaf4ca0dfc609ce624f5ad74eece1e13a93b0a121d"]},"Data.EuclideanRing":{"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.js":["2022-04-27T13:37:39Z","9bf37abbb8d5c826e2152f62c99251e9cfeac8226ead81262527a2c544765336b6a0a8df731664d1b7d7804ad821ddfb0bd2c58d91d61fea6232d6adaeb6fc69"],"../../../support/bower_components/purescript-prelude/src/Data/EuclideanRing.purs":["2022-04-27T13:37:39Z","252c8162d273ea69e96619d760b48f7302ad048ed2bdd542695fbf0489948d24369b2bd40addd7fa505e810cf411727fe9fd57546a3011ebe1fa3c534beac414"]},"Data.Field":{"../../../support/bower_components/purescript-prelude/src/Data/Field.purs":["2022-04-27T13:37:39Z","21c8a682ad74b9389e1c538ca1dbc5cc4da34b13945a1bd11812631f8f56e723e65f9452eba5b43ea8209f88c57e8566529667673b6b78ade1a08350a28b04cc"]},"Data.Function":{"../../../support/bower_components/purescript-prelude/src/Data/Function.purs":["2022-04-27T13:37:39Z","42320940aa4cdbab54308acc9ad8eac48cb3facf1f695eeb32c8473bdf31e6d51e9d689bd256c833cedd3cf40882c484153f56e8582bfc1353cc0f3b7867aa0f"]},"Data.Functor":{"../../../support/bower_components/purescript-prelude/src/Data/Functor.js":["2022-04-27T13:37:39Z","889e7781cb01bcb3007c8400d844b250905a7cc893d0391a09c2f907c8993271b0daf081548206d4c5a3948fdc7a51df5a99c6fe38c61a90ccdcb38f22886ae7"],"../../../support/bower_components/purescript-prelude/src/Data/Functor.purs":["2022-04-27T13:37:39Z","077d9d6d3e754807e5200b970988daf12894942995bb7f8698c0e0a2d08b64842dc5257efe088c045d7d0a6de2a10cb6c58b976b26243f66f69d0fa9791f60e7"]},"Data.Generic.Rep":{"../../../support/bower_components/purescript-prelude/src/Data/Generic/Rep.purs":["2022-04-27T13:37:39Z","69c6cac0ae8035b7a0bad28c1fb8c0c0d99bc93087392f5dbebac6a30bca3b5fa352741f93f432b7aa4c617e1f23d59939a69c716775e84375e112b4bb9175d1"]},"Data.HeytingAlgebra":{"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.js":["2022-04-27T13:37:39Z","3603479b96cd22a9b312ef922b95d5b342ecd8d4b1b8984a15fcfa64b92ec66128f14fdc795c2c525c9b6e6912934f2ea542df9f30b3caac3bbb085ba3326265"],"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra.purs":["2022-04-27T13:37:39Z","d8942636d4f1804c94eb7527b48f48f500843d34e2ec0b45515f4d5c836ce4437806feb4a603735f1a799243f244a72c6fda218ffe5d58f7f0cbbcbfadb01bbd"]},"Data.HeytingAlgebra.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/HeytingAlgebra/Generic.purs":["2022-04-27T13:37:39Z","ea49a37bf16af73cb930d0eb573bca8cc8e63de0a796c504f531f05d503976a59f464fa5a039a2ae9b486c9ba70857008bfb06acaaeaad6ee0f9f429355043e2"]},"Data.Monoid":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid.purs":["2022-04-27T13:37:39Z","172ecdf1da579ac35b44cb9d87424b7bb45f27b2f49a0e51be34cc1d2863a15929436321b8ed46059601b3ba171053b4129067066be0596da42607d697d8d484"]},"Data.Monoid.Additive":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Additive.purs":["2022-04-27T13:37:39Z","514e26851127fb9b52c618a36f17758513d9a7ea6724866b208e2c2447c3c3b3a9a18218b715b765e5e1e00908e2ebc0d9f2e67171ab3e46543a01508b54de67"]},"Data.Monoid.Conj":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Conj.purs":["2022-04-27T13:37:39Z","441eb08d322aa39654f68fe39676ba5fe470252adc4da087c590245ff7b0b624885c57ade6e66f24485862873767198678a219afbd7c2fc68f2ca59978d7d9c2"]},"Data.Monoid.Disj":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Disj.purs":["2022-04-27T13:37:39Z","f38cea70c5a7216b6b17c796dfbc8b08d9f05bed22d81d3784322f9f06f127435b4c9009a2027c24efc998c781796b9007bc70bc3bd1eee935b1a9695077bc7a"]},"Data.Monoid.Dual":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Dual.purs":["2022-04-27T13:37:39Z","54058218c4c5323d42e95d54a1c64b9e2ded8afdaeef2f846ef123bd4fd6772551e2158a6a9802ca327bbc4fb995f4fd5d416fd59c7a6efc8f8fe9bc5e7dc709"]},"Data.Monoid.Endo":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Endo.purs":["2022-04-27T13:37:39Z","543f16c8df42353334deddd7e25a58340aaa3f4a902a997d6b08e3128ca0afb82b3ac720e8ca8d4475cfc063906df1439afd3f2e22f7684aeb9ee0bc2992e774"]},"Data.Monoid.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Generic.purs":["2022-04-27T13:37:39Z","9e2ef0cf0469c1e798f8767cb472ee1b0103dfd6b08ed0a777c89d5043358b70cf14c2784ea59f05795f648daf80e11b2150fa89a05bc8c0afa6dafeb2fc09ac"]},"Data.Monoid.Multiplicative":{"../../../support/bower_components/purescript-prelude/src/Data/Monoid/Multiplicative.purs":["2022-04-27T13:37:39Z","f0c40f939ed3a3f00712fc7485926733668101c201e5d57e19d72ce6be84455b7b2d7360d747154a9d071df9b72e4e5ad2ac2a36db093a1b702fed4e6f4de9e3"]},"Data.NaturalTransformation":{"../../../support/bower_components/purescript-prelude/src/Data/NaturalTransformation.purs":["2022-04-27T13:37:39Z","6b9fc42ec524a517d464dea99867c64345cdbcbada4260a772373a956961ad1c9a4a3a4f8ed4a0c7c7f3e36120068954141841c5d6bdc4e5898ea06435104bb7"]},"Data.Newtype":{"../../../support/bower_components/purescript-newtype/src/Data/Newtype.purs":["2022-04-27T15:04:33Z","4289a67b60c9760f41b6fb86b71bb0bb2c576b279ae447be7fe4c3ff408ea4705ca17522647bcd8da582ef646a4abfd53fc3310d4d9d6c68816a8ccd480140be"]},"Data.Ord":{"../../../support/bower_components/purescript-prelude/src/Data/Ord.js":["2022-04-27T13:37:39Z","d3f620d4e07a9ce41745d2df0c43701dc41726e4be601b790bb054089ca52d97380299b90fe88f166e2195d76c4cbe195d941e8619fd2d14242a6a347881b1a9"],"../../../support/bower_components/purescript-prelude/src/Data/Ord.purs":["2022-04-27T13:37:39Z","f622298f91432fabf4a9b79f8ffc449a50a074d991ac8bafe19458bb8befc9377865359de1d612f156f3a3bc4b024f0eca3c758f6ce8dc1328e5a519de673f31"]},"Data.Ord.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Ord/Generic.purs":["2022-04-27T13:37:39Z","d566cfa79ec03e335f632d3edc3b913081583188d8496897c1b0904c1895525caeb5b0464b76d40ae5ef79e5c7b516ad061c1d98aa6e1c649f555be4c839087e"]},"Data.Ordering":{"../../../support/bower_components/purescript-prelude/src/Data/Ordering.purs":["2022-04-27T13:37:39Z","321b8de9b25c2616a3dbc6bff2e2def1cf7592ad54e575bd2b62d440d5dd88d7b5332f6c68fc010424e36ac13d61b5bcaadcf619ff940c667360b2c102f6e2af"]},"Data.Reflectable":{"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.js":["2022-04-27T13:37:39Z","1bbaef3b7bb472cbc13eb30d9a75f2d580d5950fe692a3e137322558a651d0352f8a7499538028404a611afecde17f551b7cbc4030bdaf0b50e6828362cf29bd"],"../../../support/bower_components/purescript-prelude/src/Data/Reflectable.purs":["2022-04-27T13:37:39Z","02beca227031091fd31673ff64153c2f84ba22c61f362acc88411643233fe91d8cabf6206319785f7b910d8dff7c81528ca7e05048e284bfc720e71f804f7a6c"]},"Data.Ring":{"../../../support/bower_components/purescript-prelude/src/Data/Ring.js":["2022-04-27T13:37:39Z","bce8767b39bf1d9af8182f80f91e376db07ae8912b991fcea6eaf37900f91c6b6ede6fb874c40ff5b3d40fc6a893468d0f0cb31106f6188ca52514ae0a081da6"],"../../../support/bower_components/purescript-prelude/src/Data/Ring.purs":["2022-04-27T13:37:39Z","4e727f1f786ced8ce8202805713a9a2810c6ef9522694535c219ce22f66e032ca374163c82db137dd7d2ded6ae4dc2786ee8b6efd1df810d5cbda9c7e2c0832e"]},"Data.Ring.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Ring/Generic.purs":["2022-04-27T13:37:39Z","8c94b1a5765b99950600e690e01e3da65cd7e43fe78f651f8531c45d41775572af47e62f21705857c82ae52251626c34f0f41180ee0563115f749c7bc0459324"]},"Data.Semigroup":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.js":["2022-04-27T13:37:39Z","fb416511575b93baf1081317aba42e97da52fdb724c07110a05c360e5254528f54715a47fa22ed4298bbdfb62c8641c8ea5ef92af9a259d51164cf541026fabc"],"../../../support/bower_components/purescript-prelude/src/Data/Semigroup.purs":["2022-04-27T13:37:39Z","43c3fbd4ab0a7a5346bdc69ce26ad3e6143f1f0e92bf8e7601af43d2ad68cfe4080411029ba3a9f29592f75e139a8fb923e67237b8e1cee3024c54b32ccf0b5d"]},"Data.Semigroup.First":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup/First.purs":["2022-04-27T13:37:39Z","8ff357056284af9050954e7695babcc76f5f632019b66f635a49502170508a37b2cb20a2e863f022bf077726480d2cc32951fb910c80559806e50830f25e884e"]},"Data.Semigroup.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup/Generic.purs":["2022-04-27T13:37:39Z","8c07803971e03a3c3d4a617198eae5a3e825c411fd17af68eee57571717a2301eaf5ec5bd34bfddf14da1f1c40d780ab9538d02f22d1d19117135388c848ca89"]},"Data.Semigroup.Last":{"../../../support/bower_components/purescript-prelude/src/Data/Semigroup/Last.purs":["2022-04-27T13:37:39Z","75b3660341f9c0570031d2304c83eb8592098e2d96577c030ae969b3b958d00b21234c2c836377e7b338e4323fa4aa0c97a4a8abb7ed49e2741907a411eb0b08"]},"Data.Semiring":{"../../../support/bower_components/purescript-prelude/src/Data/Semiring.js":["2022-04-27T13:37:39Z","71c1f69848adaf5667acc7668bb53b42a14dd64f559e72d88ae879f123aa9d5892debb1758067b8c48bfcdbbd7392e2e9ea0e5d18603ab62dbdde5032662cf33"],"../../../support/bower_components/purescript-prelude/src/Data/Semiring.purs":["2022-04-27T13:37:39Z","70fe8b0c9eb461a6058b6c89ad182fb99d4e930f158b015a386ee67ece2445b5e7aba5e539dd7377822de1b045b80d1e439f191a2274c6e95c7fb3dba535d8c0"]},"Data.Semiring.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Semiring/Generic.purs":["2022-04-27T13:37:39Z","e1aeb61208e3b96999f07cc41307d50fa8025c2f688e9dc24d7286933a11cc1ec253375e10e25fb578801bcda7b18b7342bb13275f4ca72478a2aff9ea872799"]},"Data.Show":{"../../../support/bower_components/purescript-prelude/src/Data/Show.js":["2022-04-27T13:37:39Z","2a936ee3c9835b353e0e23d37709f80dbf675fd6a3761f48a61c15db808b36f50cb4c758f7710ce7bf7e72389a9e51b1cd605ea793a30565de0f02a5866a91c4"],"../../../support/bower_components/purescript-prelude/src/Data/Show.purs":["2022-04-27T13:37:39Z","e846644987565d11a205b5f5c1ba8349a057c9710c88a461ebf2ab0bfe2f83a4f1de8c1a5653d33eca13d00fd65a086caf28ea0498c974a1fc3e7619a719a1b8"]},"Data.Show.Generic":{"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.js":["2022-04-27T13:37:39Z","f8b9a3c651ceb9e8f2ee15ae532ecd371794b4e9f3b14eb0508656c1ae853654d7e3d3c719a9a98f0dcbc81df3b03266c05d3bc01c9b62d6d8ce29d4794e4b1b"],"../../../support/bower_components/purescript-prelude/src/Data/Show/Generic.purs":["2022-04-27T13:37:39Z","37b5a1168cd88f5f6f2d2a584cfe2c69e326b9f3e62291ec607c6e4a12da144450088fe65e95cbd04204d9c616a04696b5b3d0d7e444e8628b4a1eb3597c534d"]},"Data.Symbol":{"../../../support/bower_components/purescript-prelude/src/Data/Symbol.js":["2022-04-27T13:37:39Z","c980adfe8e297bfe8e257903de3ac13f5675c6f52ed95e8c2786fcacc52adde10b5de56c9432859c3c7c8f51d1866f2e8d4a961d60e1bff656def39e3b3cdcf7"],"../../../support/bower_components/purescript-prelude/src/Data/Symbol.purs":["2022-04-27T13:37:39Z","579409ca0036164a1a0534b266cc1c90de7b020ecea470cdedf0a97cc34ae1f25ab441df9789798dc30f6a4c8f6c6368c79dc5523d9de336e57dcc6325127cb2"]},"Data.Unit":{"../../../support/bower_components/purescript-prelude/src/Data/Unit.js":["2022-04-27T13:37:39Z","d7185d75aa1f2fe353e4e200ab4181472e354d6295cb2e6587a56636b1bc733be77b2f5616b20275fe7be0138a6442b2979864b1b234a813f8d9237baa4cd5f3"],"../../../support/bower_components/purescript-prelude/src/Data/Unit.purs":["2022-04-27T13:37:39Z","a4bfca3ddacfc9d1e09019819fd94325c0fe756cb6d7e35c07a8bb6bb6c8bc6cca55a22b72f641b9fac6e5c09cae29cec932c847bdb34298310a161ee3fcfc92"]},"Data.Void":{"../../../support/bower_components/purescript-prelude/src/Data/Void.purs":["2022-04-27T13:37:39Z","a9d41b27b3dc34c74df497c4563d9c8fbe6b04ee1ee4cc32e18c3649972c84a5d330087cd3732b2cbbda204558fa79a8eea2bbba7e64916e45c49745af27d739"]},"Effect":{"../../../support/bower_components/purescript-effect/src/Effect.js":["2022-04-27T14:04:24Z","9683b917c04f50b5b8a41d8294b101d7787cd0a742840e6f05ec143f881bfb51807a2efd29a9296def2676e7c1860352f3d89f78f9205567575c5040f790da32"],"../../../support/bower_components/purescript-effect/src/Effect.purs":["2022-04-27T14:04:24Z","25ea461900466a6aade8a56c20921d46eb037a71efb12c4265dd378e760843e5793efb9f7cb47322511459136d9d4ecd6d09e5a089a432d96ef4af4530ad8e8d"]},"Effect.Class":{"../../../support/bower_components/purescript-effect/src/Effect/Class.purs":["2022-04-27T14:04:24Z","47e0114539e25826ffba341faf99133ed2499027f0955fa606d563d3504c6b41dc9d425dfa619c0c83b5fc2ab8dbb3c1bf2166b5980c5674fb93560c9b80d585"]},"Effect.Class.Console":{"../../../support/bower_components/purescript-console/src/Effect/Class/Console.purs":["2022-04-27T14:11:24Z","5a3a1a7efb4ca9d61673d954d5bed9be6eec0b512fcdffdbcca411b0fe10353da1ec9ac9e32d19f6ffe3ccb358a177cc6238064ae7dee8dfce2363ec26600edc"]},"Effect.Console":{"../../../support/bower_components/purescript-console/src/Effect/Console.js":["2022-04-27T14:11:24Z","37d5914c1c03387fb61991fa0c7273560b38a9cca1ab22a5a1071f58fb5e3cc41952c87e404f22a928e674c04fce0fa18d469b2481d6078645d20650280c9a84"],"../../../support/bower_components/purescript-console/src/Effect/Console.purs":["2022-04-27T14:11:24Z","71c92750574fc7e669d3e0a7d0f40101b91836e69275074eaf3b534fe5f68a6f3b4ebc1dc1f950f89a381996f8bdca297eac522893733bc0fd5ef2ce790af8c7"]},"Effect.Uncurried":{"../../../support/bower_components/purescript-effect/src/Effect/Uncurried.js":["2022-04-27T14:04:24Z","4c6c5db78b72ff3b84623d894b05dd916cc0732dc08d1fd45d8b0768983fdd7377b7299add3c70475459d0e190af99e2176e4c17a8cfbf295c675456bd5ba7d2"],"../../../support/bower_components/purescript-effect/src/Effect/Uncurried.purs":["2022-04-27T14:04:24Z","a948cb1cab11f5019fe20dd697b5c6e248c3b29c7ab332c2cb9d792cfcb58021a77c0f4f71e1c8d7c0b3b9cb18bd1497a0d2f40680926390f3303ecb1fe25beb"]},"Effect.Unsafe":{"../../../support/bower_components/purescript-effect/src/Effect/Unsafe.js":["2022-04-27T14:04:24Z","e66a1117e55534d61b7cd8e1859b54ef97446e0374116867383d2027bd85b73e510cbd1e4e74067b740fffb66c11e243af8d0976b2dc225d9865d882486cccdd"],"../../../support/bower_components/purescript-effect/src/Effect/Unsafe.purs":["2022-04-27T14:04:24Z","c112c559df0f177472e96655b09165d5535f68caddc2b419b4cdfe796af19b962b0659cb609a2ce501002da7de34e66592b5491ebe6f538824c2db8a1e800ea7"]},"Main":{"src/Main.purs":["2021-10-25T20:49:21.464382127Z","55bdd6dd11fb1679cb11793dd2996de21972f7aa53826557273bd649004f5907ff8cf6dff840718a12084c421529c9da7d70f698689d3923ab4ae3d608591c66"]},"Prelude":{"../../../support/bower_components/purescript-prelude/src/Prelude.purs":["2022-04-27T13:37:39Z","c67b6a882790c17476eb477da2cfc71dc4c26f297e7b4581b5ae9b0d08040ea7c7b55ed3afb3e824806e573ea4dd307eaa7cb49cfb2a756973b226ee1023e6fc"]},"Record.Unsafe":{"../../../support/bower_components/purescript-prelude/src/Record/Unsafe.js":["2022-04-27T13:37:39Z","667d613a0e1265a710e98c9f6e64ff791b9e9b7227cdf699c3a25724077c02e42726c807c0387ca4484454fd853d5b41522bf2e048887f22a894413ef80cbb92"],"../../../support/bower_components/purescript-prelude/src/Record/Unsafe.purs":["2022-04-27T13:37:39Z","af8a7c83127f5e61853ad0e572be799c04e321562a375d51ab133706ac6a6777e169b057f01a709ad7aae2d8c7a5ae8daa28eae8793c4fe92e2e8f0cfaecf870"]},"Safe.Coerce":{"../../../support/bower_components/purescript-safe-coerce/src/Safe/Coerce.purs":["2022-04-27T14:56:52Z","595abade13e21ed7893a92b338d9e7c7bf56e9067d51ca25c387d6d93a1c5542925f062e282602e89476a45501645c76dbd57eac31cc4e5c1cf341e2902beb89"]},"Type.Proxy":{"../../../support/bower_components/purescript-prelude/src/Type/Proxy.purs":["2022-04-27T13:37:39Z","333d0ae90b05098eada860ad476ed9e1eacd67d969dc1573c74375610cf8de22e85a358a7783a0a461d7ffa6fe322d8c3e90696be02555a02793ac99aba687f2"]},"Unsafe.Coerce":{"../../../support/bower_components/purescript-unsafe-coerce/src/Unsafe/Coerce.js":["2022-04-27T14:15:44Z","031c3187f7ce65110a359260041309506e1ff39a97b6eb22c9a8f2e5c14b35db87d509bb5929f245c5d80df6ccd6dadf83579ebe4ac46650acdfa34a493cfc0d"],"../../../support/bower_components/purescript-unsafe-coerce/src/Unsafe/Coerce.purs":["2022-04-27T14:15:44Z","04b214d9cbbf0c438bb2af4b25f8db5d04f247059241982f718c6d83322c3180f0eced0eb5c410860dcdb35650e9129a1cffe87f7279308cc4cf6c6570bba74f"]}}
+ tests/purs/warning/4256.out view
@@ -0,0 +1,34 @@+Warning 1 of 2:++  in module [33mMain[0m+  at tests/purs/warning/4256.purs:16:1 - 16:58 (line 16, column 1 - line 16, column 58)++    No type declaration was provided for the top-level declaration of [33mbaz[0m.+    It is good practice to provide type declarations as a form of documentation.+    The inferred type of [33mbaz[0m was:+    [33m                                                         [0m+    [33m  forall c14 d15 b25 d27. d27 -> c14 -> b25 -> d15 -> d27[0m+    [33m                                                         [0m++  in value declaration [33mbaz[0m++  See https://github.com/purescript/documentation/blob/master/errors/MissingTypeDeclaration.md for more information,+  or to contribute content related to this warning.++Warning 2 of 2:++  in module [33mMain[0m+  at tests/purs/warning/4256.purs:8:1 - 8:37 (line 8, column 1 - line 8, column 37)++    No type declaration was provided for the top-level declaration of [33maddNumberSuffix'[0m.+    It is good practice to provide type declarations as a form of documentation.+    The inferred type of [33maddNumberSuffix'[0m was:+    [33m                                              [0m+    [33m  forall b34 c35 d36. b34 -> c35 -> d36 -> Int[0m+    [33m                                              [0m++  in value declaration [33maddNumberSuffix'[0m++  See https://github.com/purescript/documentation/blob/master/errors/MissingTypeDeclaration.md for more information,+  or to contribute content related to this warning.+
+ tests/purs/warning/4256.purs view
@@ -0,0 +1,16 @@+-- @shouldWarnWith MissingTypeDeclaration+-- @shouldWarnWith MissingTypeDeclaration+module Main where++addNumberSuffix :: forall a b c d. a -> b -> c -> d -> a+addNumberSuffix a _ _ _ = a++addNumberSuffix' = addNumberSuffix 0++foo :: forall a b c d. a -> b -> c -> d -> a+foo a _ _ _ = a++bar :: forall a b c d. a -> b -> c -> d -> a+bar a _ _ _ = a++baz a x y = bar (foo a 2 3 4) (foo a 2 3 4) (foo x y a a)
+ tests/purs/warning/4268.out view
+ tests/purs/warning/4268.purs view
@@ -0,0 +1,4 @@+module Main where++f :: Partial => Int -> Int+f 0 = f 1
+ tests/purs/warning/DeprecatedCaseOfOffsideSyntax1.out view
@@ -0,0 +1,9 @@+Warning found:+at tests/purs/warning/DeprecatedCaseOfOffsideSyntax1.purs:9:3 - 9:4 (line 9, column 3 - line 9, column 4)++  Dedented expressions in case branches are deprecated and will be removed in a future release. Indent the branch's expression past it's binder instead.+++See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,+or to contribute content related to this warning.+
+ tests/purs/warning/DeprecatedCaseOfOffsideSyntax1.purs view
@@ -0,0 +1,9 @@+-- @shouldWarnWith WarningParsingModule+module DeprecatedCaseOfOffsideSyntax1 where++data Foo = Foo Int++test :: Foo -> Int+test = case _ of+    Foo i ->+  i
+ tests/purs/warning/DeprecatedCaseOfOffsideSyntax2.out view
@@ -0,0 +1,9 @@+Warning found:+at tests/purs/warning/DeprecatedCaseOfOffsideSyntax2.purs:8:3 - 8:4 (line 8, column 3 - line 8, column 4)++  Dedented expressions in case branches are deprecated and will be removed in a future release. Indent the branch's expression past it's binder instead.+++See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,+or to contribute content related to this warning.+
+ tests/purs/warning/DeprecatedCaseOfOffsideSyntax2.purs view
@@ -0,0 +1,8 @@+-- @shouldWarnWith WarningParsingModule+module DeprecatedCaseOfOffsideSyntax2 where++data Foo = Foo Int++test :: Foo -> Int+test = case _ of Foo i ->+  i
− tests/purs/warning/DeprecatedConstraintInForeignImport.js
@@ -1,5 +0,0 @@-exports.show = function (showDict) {-  return function (a) {-    return showDict.show(a);-  };-};
− tests/purs/warning/DeprecatedConstraintInForeignImport.out
@@ -1,9 +0,0 @@-Warning found:-at tests/purs/warning/DeprecatedConstraintInForeignImport.purs:6:1 - 6:50 (line 6, column 1 - line 6, column 50)--  Constraints are deprecated in foreign imports and will be removed in a future release. Omit the constraint instead and update the foreign module accordingly.---See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,-or to contribute content related to this warning.-
− tests/purs/warning/DeprecatedConstraintInForeignImport.purs
@@ -1,6 +0,0 @@--- @shouldWarnWith WarningParsingModule-module Main where--import Data.Show (class Show)--foreign import show :: ∀ a. Show a => a -> String
− tests/purs/warning/DeprecatedFFIPrime.js
@@ -1,5 +0,0 @@-exports['a\''] = 0;-exports["\x62\x27"] = 1;-// NOTE: I wanted to use "\c'" here, but langauge-javascript doesn't support it...-exports["c'"] = 2;-exports["\u0064\u0027"] = 3;
− tests/purs/warning/DeprecatedFFIPrime.out
@@ -1,56 +0,0 @@-Warning 1 of 4:--  at tests/purs/warning/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)--    In the FFI module for [33mMain[0m:--      The identifier [33ma'[0m contains a prime ([33m'[0m).-      Primes in identifiers exported from FFI modules are deprecated and won’t be supported in the future.----  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,-  or to contribute content related to this warning.--Warning 2 of 4:--  at tests/purs/warning/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)--    In the FFI module for [33mMain[0m:--      The identifier [33mb'[0m contains a prime ([33m'[0m).-      Primes in identifiers exported from FFI modules are deprecated and won’t be supported in the future.----  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,-  or to contribute content related to this warning.--Warning 3 of 4:--  at tests/purs/warning/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)--    In the FFI module for [33mMain[0m:--      The identifier [33mc'[0m contains a prime ([33m'[0m).-      Primes in identifiers exported from FFI modules are deprecated and won’t be supported in the future.----  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,-  or to contribute content related to this warning.--Warning 4 of 4:--  at tests/purs/warning/DeprecatedFFIPrime.purs:5:1 - 10:28 (line 5, column 1 - line 10, column 28)--    In the FFI module for [33mMain[0m:--      The identifier [33md'[0m contains a prime ([33m'[0m).-      Primes in identifiers exported from FFI modules are deprecated and won’t be supported in the future.----  See https://github.com/purescript/documentation/blob/master/errors/DeprecatedFFIPrime.md for more information,-  or to contribute content related to this warning.-
− tests/purs/warning/DeprecatedFFIPrime.purs
@@ -1,10 +0,0 @@--- @shouldWarnWith DeprecatedFFIPrime--- @shouldWarnWith DeprecatedFFIPrime--- @shouldWarnWith DeprecatedFFIPrime--- @shouldWarnWith DeprecatedFFIPrime-module Main where--foreign import a' :: Number-foreign import b' :: Number-foreign import c' :: Number-foreign import d' :: Number
− tests/purs/warning/DeprecatedForeignImportKind.out
@@ -1,9 +0,0 @@-Warning found:-at tests/purs/warning/DeprecatedForeignImportKind.purs:4:1 - 4:24 (line 4, column 1 - line 4, column 24)--  Foreign kind imports are deprecated and will be removed in a future release. Use empty 'data' instead.---See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,-or to contribute content related to this warning.-
− tests/purs/warning/DeprecatedForeignImportKind.purs
@@ -1,4 +0,0 @@--- @shouldWarnWith WarningParsingModule-module Main where--foreign import kind Foo
− tests/purs/warning/DeprecatedImportExportKinds.out
@@ -1,30 +0,0 @@-Warning 1 of 3:--  at tests/purs/warning/DeprecatedImportExportKinds.purs:6:13 - 6:21 (line 6, column 13 - line 6, column 21)--    Kind imports are deprecated and will be removed in a future release. Omit the 'kind' keyword instead.---  See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,-  or to contribute content related to this warning.--Warning 2 of 3:--  at tests/purs/warning/DeprecatedImportExportKinds/Lib.purs:5:1 - 5:24 (line 5, column 1 - line 5, column 24)--    Foreign kind imports are deprecated and will be removed in a future release. Use empty 'data' instead.---  See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,-  or to contribute content related to this warning.--Warning 3 of 3:--  at tests/purs/warning/DeprecatedImportExportKinds/Lib.purs:2:5 - 2:13 (line 2, column 5 - line 2, column 13)--    Kind exports are deprecated and will be removed in a future release. Omit the 'kind' keyword instead.---  See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,-  or to contribute content related to this warning.-
− tests/purs/warning/DeprecatedImportExportKinds.purs
@@ -1,8 +0,0 @@--- @shouldWarnWith WarningParsingModule--- @shouldWarnWith WarningParsingModule--- @shouldWarnWith WarningParsingModule-module Main where--import Lib (kind Foo)--foreign import data Bar :: Foo
− tests/purs/warning/DeprecatedImportExportKinds/Lib.purs
@@ -1,5 +0,0 @@-module Lib-  ( kind Foo-  ) where--foreign import kind Foo
− tests/purs/warning/DeprecatedRowKindSyntax.out
@@ -1,9 +0,0 @@-Warning found:-at tests/purs/warning/DeprecatedRowKindSyntax.purs:4:15 - 4:21 (line 4, column 15 - line 4, column 21)--  Unary '#' syntax for row kinds is deprecated and will be removed in a future release. Use the 'Row' kind instead.---See https://github.com/purescript/documentation/blob/master/errors/WarningParsingModule.md for more information,-or to contribute content related to this warning.-
− tests/purs/warning/DeprecatedRowKindSyntax.purs
@@ -1,4 +0,0 @@--- @shouldWarnWith WarningParsingModule-module Main where--class R (a :: # Type)
tests/purs/warning/Kind-UnusedExplicitImport-1.out view
@@ -1,10 +1,10 @@ Warning found: in module [33mMain[0m-at tests/purs/warning/Kind-UnusedExplicitImport-1.purs:6:1 - 6:39 (line 6, column 1 - line 6, column 39)+at tests/purs/warning/Kind-UnusedExplicitImport-1.purs:6:1 - 6:47 (line 6, column 1 - line 6, column 47)    The import of module [33mType.RowList[0m contains the following unused references: -    [33mRLProxy[0m+    [33mListToRow[0m    It could be replaced with: 
tests/purs/warning/Kind-UnusedExplicitImport-1.purs view
@@ -3,7 +3,7 @@  import Prelude (Unit, unit, pure) import Effect (Effect)-import Type.RowList (RLProxy, RowList)+import Type.RowList (class ListToRow, RowList)  class A (a :: RowList Type) 
tests/purs/warning/Kind-UnusedExplicitImport-2.out view
@@ -1,6 +1,6 @@ Warning found: in module [33mMain[0m-at tests/purs/warning/Kind-UnusedExplicitImport-2.purs:6:1 - 6:39 (line 6, column 1 - line 6, column 39)+at tests/purs/warning/Kind-UnusedExplicitImport-2.purs:6:1 - 6:47 (line 6, column 1 - line 6, column 47)    The import of module [33mType.RowList[0m contains the following unused references: @@ -8,7 +8,7 @@    It could be replaced with: -    [33mimport Type.RowList (RLProxy)[0m+    [33mimport Type.RowList (class ListToRow)[0m   
tests/purs/warning/Kind-UnusedExplicitImport-2.purs view
@@ -3,9 +3,10 @@  import Prelude (Unit, unit, pure) import Effect (Effect)-import Type.RowList (RLProxy, RowList)+import Type.RowList (class ListToRow, RowList)+import Type.Proxy (Proxy) -f :: forall l. RLProxy l -> Int+f :: forall l r. ListToRow l r => Proxy l -> Int f _ = 0  main :: Effect Unit
tests/purs/warning/UnnecessaryFFIModule.js view
@@ -1,1 +1,1 @@-exports.out = null;+export var out = null;
tests/purs/warning/UnusedFFIImplementations.js view
@@ -1,2 +1,2 @@-exports.yes = true;-exports.no = false;+export var yes = true;+export var no = false;
tests/purs/warning/WildcardInferredType2.out view
@@ -1,14 +1,83 @@-Warning found:-in module [33mMain[0m-at tests/purs/warning/WildcardInferredType2.purs:4:6 - 4:7 (line 4, column 6 - line 4, column 7)+Warning 1 of 5: -  Wildcard type definition has the inferred type-  [33m     [0m-  [33m  Int[0m-  [33m     [0m+  in module [33mMain[0m+  at tests/purs/warning/WildcardInferredType2.purs:10:6 - 10:7 (line 10, column 6 - line 10, column 7) -in value declaration [33mx[0m+    Wildcard type definition has the inferred type+    [33m     [0m+    [33m  Int[0m+    [33m     [0m -See https://github.com/purescript/documentation/blob/master/errors/WildcardInferredType.md for more information,-or to contribute content related to this warning.+  in value declaration [33mx[0m++  See https://github.com/purescript/documentation/blob/master/errors/WildcardInferredType.md for more information,+  or to contribute content related to this warning.++Warning 2 of 5:++  in module [33mMain[0m+  at tests/purs/warning/WildcardInferredType2.purs:51:9 - 51:10 (line 51, column 9 - line 51, column 10)++    Wildcard type definition has the inferred type+    [33m     [0m+    [33m  Int[0m+    [33m     [0m++  in binding group foxtrot, echo++  See https://github.com/purescript/documentation/blob/master/errors/WildcardInferredType.md for more information,+  or to contribute content related to this warning.++Warning 3 of 5:++  in module [33mMain[0m+  at tests/purs/warning/WildcardInferredType2.purs:54:8 - 54:9 (line 54, column 8 - line 54, column 9)++    Wildcard type definition has the inferred type+    [33m     [0m+    [33m  Int[0m+    [33m     [0m+    in the following context:++      m :: [33mInt[0m+++  in binding group foxtrot, echo++  See https://github.com/purescript/documentation/blob/master/errors/WildcardInferredType.md for more information,+  or to contribute content related to this warning.++Warning 4 of 5:++  in module [33mMain[0m+  at tests/purs/warning/WildcardInferredType2.purs:47:1 - 49:8 (line 47, column 1 - line 49, column 8)++    No type declaration was provided for the top-level declaration of [33mdelta[0m.+    It is good practice to provide type declarations as a form of documentation.+    The inferred type of [33mdelta[0m was:+    [33m            [0m+    [33m  Int -> Int[0m+    [33m            [0m++  in binding group delta, charlie++  See https://github.com/purescript/documentation/blob/master/errors/MissingTypeDeclaration.md for more information,+  or to contribute content related to this warning.++Warning 5 of 5:++  in module [33mMain[0m+  at tests/purs/warning/WildcardInferredType2.purs:25:1 - 31:14 (line 25, column 1 - line 31, column 14)++    No type declaration was provided for the top-level declaration of [33malpha[0m.+    It is good practice to provide type declarations as a form of documentation.+    The inferred type of [33malpha[0m was:+    [33m     [0m+    [33m  Int[0m+    [33m     [0m++  in value declaration [33malpha[0m++  See https://github.com/purescript/documentation/blob/master/errors/MissingTypeDeclaration.md for more information,+  or to contribute content related to this warning. 
tests/purs/warning/WildcardInferredType2.purs view
@@ -1,6 +1,12 @@ -- @shouldWarnWith WildcardInferredType+-- @shouldWarnWith MissingTypeDeclaration+-- @shouldWarnWith WildcardInferredType+-- @shouldWarnWith WildcardInferredType+-- @shouldWarnWith MissingTypeDeclaration module Main where +import Prelude+ x :: _ x = 42 @@ -12,3 +18,43 @@   where   n :: _   n = 42++-- Inner signatures can suppress warnings from more-inner wildcards,+-- even though a top-level signature is missing (see #4268)++alpha = f 0+  where+  f :: Int -> Int+  f m = n+    where+    n :: _+    n = m + 1  ++-- Tests for recursive binding groups (see #4268)++bravo :: Int -> Int+bravo m = if n > 0 then bravo (n - 1) else n+  where+  n :: _+  n = m++charlie :: Int -> Int+charlie m = if n > 0 then delta (n - 1) else n+  where+  n :: _+  n = m++delta m = if n > 0 then charlie (n - 1) else n+  where+  n = m++echo :: _ -> Int -- Partial signatures don't count!+echo m = if n > 0 then foxtrot (n - 1) else n+  where+  n :: _+  n = m++foxtrot :: Int -> Int+foxtrot m = if n > 0 then echo (n - 1) else n+  where+  n = m
tests/support/bower.json view
@@ -1,38 +1,39 @@ {   "name": "purescript-test-suite-support",   "dependencies": {-    "purescript-arrays": "6.0.0",-    "purescript-assert": "5.0.0",-    "purescript-bifunctors": "5.0.0",-    "purescript-console": "5.0.0",-    "purescript-control": "5.0.0",-    "purescript-distributive": "5.0.0",-    "purescript-effect": "3.0.0",-    "purescript-either": "5.0.0",-    "purescript-foldable-traversable": "5.0.0",-    "purescript-functions": "5.0.0",-    "purescript-gen": "3.0.0",-    "purescript-identity": "5.0.0",-    "purescript-integers": "5.0.0",-    "purescript-invariant": "5.0.0",-    "purescript-lazy": "5.0.0",-    "purescript-lists": "6.0.0",-    "purescript-math": "3.0.0",-    "purescript-maybe": "5.0.0",-    "purescript-newtype": "4.0.0",-    "purescript-nonempty": "6.0.0",-    "purescript-partial": "3.0.0",-    "purescript-prelude": "5.0.0",-    "purescript-psci-support": "5.0.0",-    "purescript-refs": "5.0.0",-    "purescript-safe-coerce": "1.0.0",-    "purescript-st": "5.0.0",-    "purescript-strings": "5.0.0",-    "purescript-tailrec": "5.0.0",-    "purescript-tuples": "6.0.0",-    "purescript-type-equality": "4.0.0",-    "purescript-typelevel-prelude": "6.0.0",-    "purescript-unfoldable": "5.0.0",-    "purescript-unsafe-coerce": "5.0.0"+    "purescript-arrays": "^7.0.0",+    "purescript-assert": "^6.0.0",+    "purescript-bifunctors": "^6.0.0",+    "purescript-console": "^6.0.0",+    "purescript-control": "^6.0.0",+    "purescript-distributive": "^6.0.0",+    "purescript-effect": "^4.0.0",+    "purescript-either": "^6.0.0",+    "purescript-enums": "^6.0.0",+    "purescript-foldable-traversable": "^6.0.0",+    "purescript-functions": "^6.0.0",+    "purescript-gen": "^4.0.0",+    "purescript-identity": "^6.0.0",+    "purescript-integers": "^6.0.0",+    "purescript-invariant": "^6.0.0",+    "purescript-lazy": "^6.0.0",+    "purescript-lists": "^7.0.0",+    "purescript-maybe": "^6.0.0",+    "purescript-newtype": "^5.0.0",+    "purescript-nonempty": "^7.0.0",+    "purescript-numbers": "^9.0.0",+    "purescript-partial": "^4.0.0",+    "purescript-prelude": "^6.0.0",+    "purescript-psci-support": "^6.0.0",+    "purescript-refs": "^6.0.0",+    "purescript-safe-coerce": "^2.0.0",+    "purescript-st": "^6.0.0",+    "purescript-strings": "^6.0.0",+    "purescript-tailrec": "^6.0.0",+    "purescript-tuples": "^7.0.0",+    "purescript-type-equality": "^4.0.1",+    "purescript-typelevel-prelude": "^7.0.0",+    "purescript-unfoldable": "^6.0.0",+    "purescript-unsafe-coerce": "^6.0.0"   } }
tests/support/pscide/src/RebuildSpecWithForeign.js view
@@ -1,1 +1,1 @@-exports.f = 5;+export var f = 5;