1
1
mirror of https://github.com/github/semantic.git synced 2024-12-25 07:55:12 +03:00

Merge branch 'master' into charliesome/module-result

This commit is contained in:
Charlie Somerville 2018-07-18 14:53:31 +10:00
commit a3bc96834c
102 changed files with 590 additions and 396 deletions

View File

@ -19,6 +19,12 @@
# Generalise map to fmap, ++ to <> # Generalise map to fmap, ++ to <>
- group: {name: generalise, enabled: true} - group: {name: generalise, enabled: true}
# Change the severity of the default group to warning
- warn: {group: {name: default}}
# Ignore the highly noisy module export list hint
- ignore: {name: Use module export list}
# Ignore some builtin hints # Ignore some builtin hints
- ignore: {name: Use mappend} - ignore: {name: Use mappend}
- ignore: {name: Redundant do} - ignore: {name: Redundant do}

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: QuickCheck name: QuickCheck
version: 2.10.1 version: 2.11.3
summary: Automatic testing of Haskell programs summary: Automatic testing of Haskell programs
homepage: https://github.com/nick8325/quickcheck homepage: https://github.com/nick8325/quickcheck
license: bsd-3-clause license: bsd-3-clause
@ -34,4 +34,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: async name: async
version: 2.1.1.1 version: 2.2.1
summary: Run IO operations asynchronously and wait for their results summary: Run IO operations asynchronously and wait for their results
homepage: https://github.com/simonmar/async homepage: https://github.com/simonmar/async
license: bsd-3-clause license: bsd-3-clause
@ -35,4 +35,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,27 @@
---
type: cabal
name: base-compat-batteries
version: 0.10.1
summary: base-compat with extra batteries
homepage:
license: mit
---
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.

View File

@ -1,12 +1,12 @@
--- ---
type: cabal type: cabal
name: base-compat name: base-compat
version: 0.9.3 version: 0.10.4
summary: A compatibility layer for base summary: A compatibility layer for base
homepage: https://github.com/haskell-compat/base-compat homepage:
license: mit license: mit
--- ---
Copyright (c) 2012-2017 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com> 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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@ -24,4 +24,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 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 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: base-prelude name: base-prelude
version: 1.2.1 version: '1.3'
summary: The most complete prelude formed solely from the "base" package summary: The most complete prelude formed solely from the "base" package
homepage: https://github.com/nikita-volkov/base-prelude homepage: https://github.com/nikita-volkov/base-prelude
license: mit license: mit
@ -27,4 +27,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE. OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: base name: base
version: 4.10.1.0 version: 4.11.1.0
summary: Basic libraries summary: Basic libraries
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -88,4 +88,4 @@ the following license:
version is clearly presented as such, and that it does not claim to version is clearly presented as such, and that it does not claim to
be a definition of the Haskell 98 Foreign Function Interface. be a definition of the Haskell 98 Foreign Function Interface.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: bifunctors name: bifunctors
version: 5.5.2 version: 5.5.3
summary: Bifunctors summary: Bifunctors
homepage: https://github.com/ekmett/bifunctors/ homepage: https://github.com/ekmett/bifunctors/
license: bsd-2-clause license: bsd-2-clause
@ -31,4 +31,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: cmark-gfm name: cmark-gfm
version: 0.1.3 version: 0.1.4
summary: Fast, accurate GitHub Flavored Markdown parser and renderer summary: Fast, accurate GitHub Flavored Markdown parser and renderer
homepage: https://github.com/kivikakk/cmark-gfm-hs homepage: https://github.com/kivikakk/cmark-gfm-hs
license: multiple license: multiple
@ -141,4 +141,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 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 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: comonad name: comonad
version: 5.0.3 version: 5.0.4
summary: Comonads summary: Comonads
homepage: https://github.com/ekmett/comonad/ homepage: https://github.com/ekmett/comonad/
license: bsd-2-clause license: bsd-2-clause
@ -32,4 +32,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,9 +1,9 @@
--- ---
type: cabal type: cabal
name: containers name: containers
version: 0.5.10.2 version: 0.5.11.0
summary: Assorted concrete container types summary: Assorted concrete container types
homepage: https://github.com/haskell/containers homepage:
license: bsd-3-clause license: bsd-3-clause
--- ---
The Glasgow Haskell Compiler License The Glasgow Haskell Compiler License
@ -36,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,13 +1,13 @@
--- ---
type: cabal type: cabal
name: directory name: directory
version: 1.3.0.2 version: 1.3.1.5
summary: Platform-agnostic library for filesystem operations summary: Platform-agnostic library for filesystem operations
homepage: https://github.com/haskell/directory homepage:
license: bsd-3-clause license: bsd-3-clause
--- ---
This library (libraries/base) is derived from code from two This library (libraries/base) is derived from code from two
sources: sources:
* Code from the GHC project which is largely (c) The University of * Code from the GHC project which is largely (c) The University of
Glasgow, and distributable under a BSD-style license (see below), Glasgow, and distributable under a BSD-style license (see below),
@ -23,7 +23,7 @@ licenses are BSD-style or compatible.
The Glasgow Haskell Compiler License The Glasgow Haskell Compiler License
Copyright 2004, The University Court of the University of Glasgow. Copyright 2004, The University Court of the University of Glasgow.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
@ -31,14 +31,14 @@ modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, - Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, - Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
- Neither name of the University nor the names of its contributors may be - Neither name of the University nor the names of its contributors may be
used to endorse or promote products derived from this software without used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
@ -68,4 +68,4 @@ Haskell 98", is distributed under the following license:
version is clearly presented as such, and that it does not claim to version is clearly presented as such, and that it does not claim to
be a definition of the Haskell 98 Language. be a definition of the Haskell 98 Language.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: exceptions name: exceptions
version: 0.8.3 version: 0.10.0
summary: Extensible optionally-pure exceptions summary: Extensible optionally-pure exceptions
homepage: https://github.com/ekmett/exceptions/ homepage: https://github.com/ekmett/exceptions/
license: bsd-3-clause license: bsd-3-clause
@ -36,4 +36,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,38 +0,0 @@
---
type: cabal
name: fail
version: 4.9.0.0
summary: Forward-compatible MonadFail class
homepage: https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail
license: bsd-3-clause
---
Copyright (c) 2015, David Luposchainsky & 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.

View File

@ -1,12 +1,12 @@
--- ---
type: cabal type: cabal
name: filepath name: filepath
version: 1.4.1.2 version: 1.4.2
summary: Library for manipulating FilePaths in a cross platform way. summary: Library for manipulating FilePaths in a cross platform way.
homepage: https://github.com/haskell/filepath homepage: https://github.com/haskell/filepath
license: bsd-3-clause license: bsd-3-clause
--- ---
Copyright Neil Mitchell 2005-2017. Copyright Neil Mitchell 2005-2018.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
@ -35,4 +35,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: foldl name: foldl
version: 1.3.7 version: 1.4.2
summary: Composable, streaming, and efficient left folds summary: Composable, streaming, and efficient left folds
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -29,4 +29,4 @@ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-boot-th name: ghc-boot-th
version: 8.2.2 version: 8.4.3
summary: Shared functionality between GHC and the @template-haskell@ summary: Shared functionality between GHC and the @template-haskell@
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -36,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-boot name: ghc-boot
version: 8.2.2 version: 8.4.3
summary: Shared functionality between GHC and its boot libraries summary: Shared functionality between GHC and its boot libraries
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -36,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-prim name: ghc-prim
version: 0.5.1.1 version: 0.5.2.0
summary: GHC primitives summary: GHC primitives
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -66,5 +66,4 @@ Haskell 98", is distributed under the following license:
including this Notice. Modified versions of this Report may also be including this Notice. Modified versions of this Report may also be
copied and distributed for any purpose, provided that the modified copied and distributed for any purpose, provided that the modified
version is clearly presented as such, and that it does not claim to version is clearly presented as such, and that it does not claim to
be a definition of the Haskell 98 Language. be a definition of the Haskell 98 Language.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-tcplugins-extra name: ghc-tcplugins-extra
version: 0.2.5 version: '0.3'
summary: Utilities for writing GHC type-checker plugins summary: Utilities for writing GHC type-checker plugins
homepage: https://github.com/clash-lang/ghc-tcplugins-extra homepage: https://github.com/clash-lang/ghc-tcplugins-extra
license: bsd-2-clause license: bsd-2-clause
@ -32,4 +32,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-typelits-extra name: ghc-typelits-extra
version: 0.2.4 version: 0.2.5
summary: Additional type-level operations on GHC.TypeLits.Nat summary: Additional type-level operations on GHC.TypeLits.Nat
homepage: https://www.clash-lang.org/ homepage: https://www.clash-lang.org/
license: bsd-2-clause license: bsd-2-clause
@ -32,4 +32,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-typelits-knownnat name: ghc-typelits-knownnat
version: 0.4.2 version: '0.5'
summary: Derive KnownNat constraints from other KnownNat constraints summary: Derive KnownNat constraints from other KnownNat constraints
homepage: https://clash-lang.org/ homepage: https://clash-lang.org/
license: bsd-2-clause license: bsd-2-clause
@ -33,4 +33,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc-typelits-natnormalise name: ghc-typelits-natnormalise
version: 0.5.10 version: 0.6.1
summary: GHC typechecker plugin for types of kind GHC.TypeLits.Nat summary: GHC typechecker plugin for types of kind GHC.TypeLits.Nat
homepage: https://www.clash-lang.org/ homepage: https://www.clash-lang.org/
license: bsd-2-clause license: bsd-2-clause
@ -32,4 +32,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghc name: ghc
version: 8.2.2 version: 8.4.3
summary: The GHC API summary: The GHC API
homepage: https://www.haskell.org/ghc/ homepage: https://www.haskell.org/ghc/
license: bsd-3-clause license: bsd-3-clause
@ -36,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: ghci name: ghci
version: 8.2.2 version: 8.4.3
summary: The library supporting GHC's interactive interpreter summary: The library supporting GHC's interactive interpreter
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -36,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,41 +0,0 @@
---
type: cabal
name: hoopl
version: 3.10.2.2
summary: A library to support dataflow analysis and optimization
homepage: https://github.com/haskell/hoopl
license: bsd-3-clause
---
Copyright (c) 2010, Jo<4A>o Dias, Simon Marlow, Simon Peyton Jones, and Norman Ramsey
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 Tufts University nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
Neither the name of Microsoft 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.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: http-client name: http-client
version: 0.5.12.1 version: 0.5.13.1
summary: An HTTP client engine summary: An HTTP client engine
homepage: https://github.com/snoyberg/http-client homepage: https://github.com/snoyberg/http-client
license: mit license: mit
@ -25,4 +25,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 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 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 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. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,9 +1,9 @@
--- ---
type: cabal type: cabal
name: integer-gmp name: integer-gmp
version: 1.0.1.0 version: 1.0.2.0
summary: Integer library based on GMP summary: Integer library based on GMP
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
--- ---
Copyright (c) 2014, Herbert Valerio Riedel Copyright (c) 2014, Herbert Valerio Riedel
@ -35,4 +35,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,31 @@
---
type: cabal
name: invariant
version: '0.5'
summary: Haskell98 invariant functors
homepage: https://github.com/nfrisby/invariant-functors
license: bsd-2-clause
---
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.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: kan-extensions name: kan-extensions
version: '5.1' version: '5.2'
summary: Kan extensions, Kan lifts, the Yoneda lemma, and (co)density (co)monads summary: Kan extensions, Kan lifts, the Yoneda lemma, and (co)density (co)monads
homepage: https://github.com/ekmett/kan-extensions/ homepage: https://github.com/ekmett/kan-extensions/
license: bsd-3-clause license: bsd-3-clause
@ -35,4 +35,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: keys name: keys
version: '3.12' version: 3.12.1
summary: Keyed functors and containers summary: Keyed functors and containers
homepage: https://github.com/ekmett/keys/ homepage: https://github.com/ekmett/keys/
license: bsd-3-clause license: bsd-3-clause
@ -35,4 +35,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,34 @@
---
type: cabal
name: megaparsec
version: 6.5.0
summary: Monadic parser combinators
homepage: https://github.com/mrkkrp/megaparsec
license: bsd-2-clause
---
Copyright © 20152018 Megaparsec contributors<br>
Copyright © 2007 Paolo Martini<br>
Copyright © 19992000 Daan Leijen
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.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: mime-types name: mime-types
version: 0.1.0.7 version: 0.1.0.8
summary: Basic mime-type handling types and functions summary: Basic mime-type handling types and functions
homepage: https://github.com/yesodweb/wai homepage: https://github.com/yesodweb/wai
license: mit license: mit
@ -25,4 +25,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: neat-interpolation name: neat-interpolation
version: 0.3.2.1 version: 0.3.2.2
summary: A quasiquoter for neat and simple multiline text interpolation summary: A quasiquoter for neat and simple multiline text interpolation
homepage: https://github.com/nikita-volkov/neat-interpolation homepage: https://github.com/nikita-volkov/neat-interpolation
license: mit license: mit

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: network name: network
version: 2.6.3.5 version: 2.6.3.6
summary: Low-level networking interface summary: Low-level networking interface
homepage: https://github.com/haskell/network homepage: https://github.com/haskell/network
license: bsd-3-clause license: bsd-3-clause
@ -34,4 +34,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -0,0 +1,36 @@
---
type: cabal
name: parser-combinators
version: 1.0.0
summary: Lightweight package providing commonly useful parser combinators
homepage: https://github.com/mrkkrp/parser-combinators
license: bsd-3-clause
---
Copyright © 20172018 Mark Karpov
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 Mark Karpov nor the names of 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 “AS IS” AND ANY EXPRESS
OR IMPLIED 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.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: parsers name: parsers
version: 0.12.8 version: 0.12.9
summary: Parsing combinators summary: Parsing combinators
homepage: https://github.com/ekmett/parsers/ homepage: https://github.com/ekmett/parsers/
license: bsd-3-clause license: bsd-3-clause
@ -35,4 +35,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: pretty name: pretty
version: 1.1.3.3 version: 1.1.3.6
summary: Pretty-printing library summary: Pretty-printing library
homepage: https://github.com/haskell/pretty homepage: https://github.com/haskell/pretty
license: bsd-3-clause license: bsd-3-clause
@ -14,7 +14,7 @@ Glasgow, and distributable under a BSD-style license (see below).
The Glasgow Haskell Compiler License The Glasgow Haskell Compiler License
Copyright 2004, The University Court of the University of Glasgow. Copyright 2004, The University Court of the University of Glasgow.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
@ -22,14 +22,14 @@ modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, - Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, - Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
- Neither name of the University nor the names of its contributors may be - Neither name of the University nor the names of its contributors may be
used to endorse or promote products derived from this software without used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
@ -44,4 +44,4 @@ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------

View File

@ -1,13 +1,13 @@
--- ---
type: cabal type: cabal
name: process name: process
version: 1.6.1.0 version: 1.6.3.0
summary: Process libraries summary: Process libraries
homepage: https://github.com/haskell/process homepage:
license: bsd-3-clause license: bsd-3-clause
--- ---
This library (libraries/process) is derived from code from two This library (libraries/process) is derived from code from two
sources: sources:
* Code from the GHC project which is largely (c) The University of * Code from the GHC project which is largely (c) The University of
Glasgow, and distributable under a BSD-style license (see below), Glasgow, and distributable under a BSD-style license (see below),
@ -23,7 +23,7 @@ licenses are BSD-style or compatible.
The Glasgow Haskell Compiler License The Glasgow Haskell Compiler License
Copyright 2004, The University Court of the University of Glasgow. Copyright 2004, The University Court of the University of Glasgow.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
@ -31,14 +31,14 @@ modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, - Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, - Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
- Neither name of the University nor the names of its contributors may be - Neither name of the University nor the names of its contributors may be
used to endorse or promote products derived from this software without used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
@ -68,4 +68,4 @@ Haskell 98", is distributed under the following license:
version is clearly presented as such, and that it does not claim to version is clearly presented as such, and that it does not claim to
be a definition of the Haskell 98 Language. be a definition of the Haskell 98 Language.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: quickcheck-instances name: quickcheck-instances
version: 0.3.16.1 version: 0.3.18
summary: Common quickcheck instances summary: Common quickcheck instances
homepage: https://github.com/phadej/qc-instances homepage: https://github.com/phadej/qc-instances
license: bsd-3-clause license: bsd-3-clause
@ -35,4 +35,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: recursion-schemes name: recursion-schemes
version: 5.0.2 version: 5.0.3
summary: Generalized bananas, lenses and barbed wire summary: Generalized bananas, lenses and barbed wire
homepage: https://github.com/ekmett/recursion-schemes/ homepage: https://github.com/ekmett/recursion-schemes/
license: bsd-2-clause license: bsd-2-clause
@ -31,4 +31,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: reducers name: reducers
version: 3.12.2 version: 3.12.3
summary: Semigroups, specialized containers and a general map/reduce framework summary: Semigroups, specialized containers and a general map/reduce framework
homepage: https://github.com/ekmett/reducers/ homepage: https://github.com/ekmett/reducers/
license: bsd-3-clause license: bsd-3-clause
@ -35,4 +35,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: reflection name: reflection
version: 2.1.3 version: 2.1.4
summary: Reifies arbitrary terms into types that can be reflected back into terms summary: Reifies arbitrary terms into types that can be reflected back into terms
homepage: https://github.com/ekmett/reflection homepage: https://github.com/ekmett/reflection
license: bsd-3-clause license: bsd-3-clause
@ -36,4 +36,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: semigroups name: semigroups
version: 0.18.4 version: 0.18.5
summary: Anything that associates summary: Anything that associates
homepage: https://github.com/ekmett/semigroups/ homepage: https://github.com/ekmett/semigroups/
license: bsd-2-clause license: bsd-2-clause
@ -31,4 +31,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: streaming-commons name: streaming-commons
version: 0.1.19 version: 0.2.1.0
summary: Common lower-level functions needed by various streaming data libraries summary: Common lower-level functions needed by various streaming data libraries
homepage: https://github.com/fpco/streaming-commons homepage: https://github.com/fpco/streaming-commons
license: mit license: mit

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: swagger2 name: swagger2
version: 2.1.6 version: 2.2.2
summary: Swagger 2.0 data model summary: Swagger 2.0 data model
homepage: https://github.com/GetShopTV/swagger2 homepage: https://github.com/GetShopTV/swagger2
license: bsd-3-clause license: bsd-3-clause
@ -32,5 +32,4 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,12 +1,11 @@
--- ---
type: cabal type: cabal
name: template-haskell name: template-haskell
version: 2.12.0.0 version: 2.13.0.0
summary: Support library for Template Haskell summary: Support library for Template Haskell
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
--- ---
The Glasgow Haskell Compiler License The Glasgow Haskell Compiler License
Copyright 2002-2007, The University Court of the University of Glasgow. Copyright 2002-2007, The University Court of the University of Glasgow.
@ -37,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: temporary name: temporary
version: 1.2.1.1 version: '1.3'
summary: Portable temporary file and directory support summary: Portable temporary file and directory support
homepage: https://github.com/feuerbach/temporary homepage: https://github.com/feuerbach/temporary
license: bsd-3-clause license: bsd-3-clause
@ -32,4 +32,4 @@ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: terminfo name: terminfo
version: 0.4.1.0 version: 0.4.1.1
summary: Haskell bindings to the terminfo library. summary: Haskell bindings to the terminfo library.
homepage: https://github.com/judah/terminfo homepage: https://github.com/judah/terminfo
license: bsd-2-clause license: bsd-2-clause
@ -28,4 +28,4 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER SERVICES; LOSS OF USE, DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: th-abstraction name: th-abstraction
version: 0.2.6.0 version: 0.2.8.0
summary: Nicer interface for reified information about data types summary: Nicer interface for reified information about data types
homepage: https://github.com/glguy/th-abstraction homepage: https://github.com/glguy/th-abstraction
license: isc license: isc
@ -18,4 +18,4 @@ FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS 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 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 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE. THIS SOFTWARE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: transformers-base name: transformers-base
version: 0.4.4 version: 0.4.5.2
summary: Lift computations from the bottom of a transformer stack summary: Lift computations from the bottom of a transformer stack
homepage: https://github.com/mvv/transformers-base homepage: https://github.com/mvv/transformers-base
license: bsd-3-clause license: bsd-3-clause
@ -9,16 +9,16 @@ license: bsd-3-clause
Copyright (c) 2011, Mikhail Vorozhtsov, Bas van Dijk Copyright (c) 2011, Mikhail Vorozhtsov, Bas van Dijk
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, - Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright - Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution. documentation and/or other materials provided with the distribution.
- Neither the names of the copyright owners nor the names of the - Neither the names of the copyright owners nor the names of the
contributors may be used to endorse or promote products derived contributors may be used to endorse or promote products derived
from this software without specific prior written permission. from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
@ -31,5 +31,4 @@ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,9 +1,8 @@
--- ---
type: cabal type: cabal
name: transformers-compat name: transformers-compat
version: 0.5.1.4 version: 0.6.2
summary: A small compatibility shim exposing the new types from transformers 0.3 and summary: A small compatibility shim for the transformers library
0.4 to older Haskell platforms.
homepage: https://github.com/ekmett/transformers-compat/ homepage: https://github.com/ekmett/transformers-compat/
license: bsd-3-clause license: bsd-3-clause
--- ---
@ -36,4 +35,4 @@ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,9 +1,9 @@
--- ---
type: cabal type: cabal
name: transformers name: transformers
version: 0.5.2.0 version: 0.5.5.0
summary: Concrete functor and monad transformers summary: Concrete functor and monad transformers
homepage: https://hub.darcs.net/ross/transformers homepage:
license: bsd-3-clause license: bsd-3-clause
--- ---
The Glasgow Haskell Compiler License The Glasgow Haskell Compiler License
@ -36,4 +36,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE. DAMAGE.

View File

@ -1,7 +1,7 @@
--- ---
type: cabal type: cabal
name: turtle name: turtle
version: 1.5.8 version: 1.5.10
summary: Shell programming, Haskell-style summary: Shell programming, Haskell-style
homepage: homepage:
license: bsd-3-clause license: bsd-3-clause
@ -29,4 +29,4 @@ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -32,7 +32,7 @@ service CodeAnalysis {
// Calculate an import graph for a project. // Calculate an import graph for a project.
rpc GraphImports (ImportGraphRequest) returns (ImportGraphResponse); rpc GraphImports (ImportGraphRequest) returns (ImportGraphResponse);
// rpc GraphCalls (CallGraphRequest) returns (CallGraphResponse); rpc GraphCalls (CallGraphRequest) returns (CallGraphResponse);
// Check health & status of the service. // Check health & status of the service.
rpc CheckHealth (HealthCheckRequest) returns (HealthCheckResponse); rpc CheckHealth (HealthCheckRequest) returns (HealthCheckResponse);
@ -71,12 +71,21 @@ message SummarizeDiffResponse {
repeated ParseError errors = 2; repeated ParseError errors = 2;
} }
message CallGraphRequest {
Project project = 1;
}
message CallGraphResponse {
AdjacencyList graph = 1;
DebugInfo error_info = 2;
}
message ImportGraphRequest { message ImportGraphRequest {
Project project = 1; Project project = 1;
} }
message ImportGraphResponse { message ImportGraphResponse {
ImportGraph graph = 1; AdjacencyList graph = 1;
DebugInfo error_info = 2; DebugInfo error_info = 2;
} }

View File

@ -42,7 +42,7 @@ message ErrorSite {
SrcLoc errorLocation = 2; SrcLoc errorLocation = 2;
} }
message ImportGraph { message AdjacencyList {
repeated Vertex graphVertices = 1; repeated Vertex graphVertices = 1;
repeated Edge graphEdges = 2; repeated Edge graphEdges = 2;
} }

View File

@ -77,7 +77,7 @@ library
, Data.Functor.Both , Data.Functor.Both
, Data.Functor.Classes.Generic , Data.Functor.Classes.Generic
, Data.Graph , Data.Graph
, Data.Graph.Adjacency.Import , Data.Graph.Adjacency
, Data.Graph.Vertex , Data.Graph.Vertex
, Data.JSON.Fields , Data.JSON.Fields
, Data.Language , Data.Language
@ -289,6 +289,7 @@ test-suite test
, Diffing.Algorithm.RWS.Spec , Diffing.Algorithm.RWS.Spec
, Diffing.Algorithm.SES.Spec , Diffing.Algorithm.SES.Spec
, Diffing.Interpreter.Spec , Diffing.Interpreter.Spec
, Graphing.Calls.Spec
, Integration.Spec , Integration.Spec
, Matching.Go.Spec , Matching.Go.Spec
, Numeric.Spec , Numeric.Spec
@ -301,6 +302,7 @@ test-suite test
, SpecHelpers , SpecHelpers
, Test.Hspec.LeanCheck , Test.Hspec.LeanCheck
build-depends: aeson build-depends: aeson
, algebraic-graphs
, array , array
, async , async
, base , base

View File

@ -105,7 +105,6 @@ convergingModules recur m = do
withOracle prevCache (gatherM (const ()) (recur m))) withOracle prevCache (gatherM (const ()) (recur m)))
TermEvaluator (address =<< runTermEvaluator (maybe empty scatter (cacheLookup c cache))) TermEvaluator (address =<< runTermEvaluator (maybe empty scatter (cacheLookup c cache)))
-- | Iterate a monadic action starting from some initial seed until the results converge. -- | Iterate a monadic action starting from some initial seed until the results converge.
-- --
-- This applies the Kleene fixed-point theorem to finitize a monotone action. cf https://en.wikipedia.org/wiki/Kleene_fixed-point_theorem -- This applies the Kleene fixed-point theorem to finitize a monotone action. cf https://en.wikipedia.org/wiki/Kleene_fixed-point_theorem

View File

@ -49,7 +49,7 @@ graphingTerms :: ( Element Syntax.Identifier syntax
, Member (Reader ModuleInfo) effects , Member (Reader ModuleInfo) effects
, Member (Env (Hole (Located address))) effects , Member (Env (Hole (Located address))) effects
, Member (State (Graph Vertex)) effects , Member (State (Graph Vertex)) effects
, term ~ Term (Sum syntax) ann , Base term ~ TermF (Sum syntax) ann
) )
=> SubtermAlgebra (Base term) term (TermEvaluator term (Hole (Located address)) value effects a) => SubtermAlgebra (Base term) term (TermEvaluator term (Hole (Located address)) value effects a)
-> SubtermAlgebra (Base term) term (TermEvaluator term (Hole (Located address)) value effects a) -> SubtermAlgebra (Base term) term (TermEvaluator term (Hole (Located address)) value effects a)

View File

@ -31,8 +31,8 @@ import Prologue
getEnv :: Member (Env address) effects => Evaluator address value effects (Environment address) getEnv :: Member (Env address) effects => Evaluator address value effects (Environment address)
getEnv = send GetEnv getEnv = send GetEnv
-- | Replace the environment. -- | Replace the environment. This is only for use in Analysis.Abstract.Caching.
putEnv :: Member (Env address) effects => (Environment address) -> Evaluator address value effects () putEnv :: Member (Env address) effects => Environment address -> Evaluator address value effects ()
putEnv = send . PutEnv putEnv = send . PutEnv
-- | Replace the environment for a computation -- | Replace the environment for a computation
@ -66,7 +66,7 @@ bindAll = foldr ((>>) . uncurry bind) (pure ()) . Env.pairs
-- | Run an action in a new local scope. -- | Run an action in a new local scope.
locally :: forall address value effects a . Member (Env address) effects => Evaluator address value effects a -> Evaluator address value effects a locally :: forall address value effects a . Member (Env address) effects => Evaluator address value effects a -> Evaluator address value effects a
locally = send . Locally @address . lowerEff locally = send . Locally @_ @_ @address . lowerEff
close :: Member (Env address) effects => Set Name -> Evaluator address value effects (Environment address) close :: Member (Env address) effects => Set Name -> Evaluator address value effects (Environment address)
close = send . Close close = send . Close

View File

@ -7,15 +7,12 @@ module Control.Abstract.Roots
import Control.Abstract.Evaluator import Control.Abstract.Evaluator
import Data.Abstract.Live import Data.Abstract.Live
import Prologue
-- | Value types, e.g. closures, which can root a set of addresses. -- | Value types, e.g. closures, which can root a set of addresses.
class ValueRoots address value where class ValueRoots address value where
-- | Compute the set of addresses rooted by a given value. -- | Compute the set of addresses rooted by a given value.
valueRoots :: value -> Live address valueRoots :: value -> Live address
-- | Retrieve the local 'Live' set. -- | Retrieve the local 'Live' set.
askRoots :: Member (Reader (Live address)) effects => Evaluator address value effects (Live address) askRoots :: Member (Reader (Live address)) effects => Evaluator address value effects (Live address)
askRoots = ask askRoots = ask

View File

@ -32,6 +32,9 @@ cacheSet key value = Cache . Monoidal.insert key value . unCache
cacheInsert :: Cacheable term address cell value => Configuration term address cell value -> Cached address cell value -> Cache term address cell value -> Cache term address cell value cacheInsert :: Cacheable term address cell value => Configuration term address cell value -> Cached address cell value -> Cache term address cell value -> Cache term address cell value
cacheInsert = curry cons cacheInsert = curry cons
-- | Return all 'Configuration's in the provided cache.
cacheKeys :: Cache term address cell value -> [Configuration term address cell value]
cacheKeys = Monoidal.keys . unCache
instance (Show term, Show address, Show (cell value), Show value) => Show (Cache term address cell value) where instance (Show term, Show address, Show (cell value), Show value) => Show (Cache term address cell value) where
showsPrec d = showsUnaryWith showsPrec "Cache" d . map (second toList) . Monoidal.pairs . unCache showsPrec d = showsUnaryWith showsPrec "Cache" d . map (second toList) . Monoidal.pairs . unCache

View File

@ -1,7 +1,6 @@
{-# LANGUAGE GeneralizedNewtypeDeriving, UndecidableInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving, UndecidableInstances #-}
module Data.Abstract.Declarations where module Data.Abstract.Declarations where
import Data.Abstract.FreeVariables
import Data.Abstract.Name import Data.Abstract.Name
import Data.Sum import Data.Sum
import Data.Term import Data.Term
@ -12,19 +11,21 @@ class Declarations syntax where
declaredName = const Nothing declaredName = const Nothing
class Declarations1 syntax where class Declarations1 syntax where
-- | Lift a function mapping each element to its set of free variables through a containing structure, collecting the results into a single set. -- | Lift a function mapping each element to its declared name (if any) through a containing structure. This can be used to define the declared name for a composite piece of syntax in terms of the declared name of one of its components.
liftDeclaredName :: (a -> [Name]) -> syntax a -> Maybe Name --
-- Note that not all syntax will have a declared name; in general its reserved for syntax where the user has provided a single, unambiguous name for whatever term is being introduced. Examples would be (non-anonymous) functions, methods, and classes; but not (generally) literals or blocks of imperative statements.
liftDeclaredName :: (a -> Maybe Name) -> syntax a -> Maybe Name
liftDeclaredName _ _ = Nothing liftDeclaredName _ _ = Nothing
instance Declarations t => Declarations (Subterm t a) where instance Declarations t => Declarations (Subterm t a) where
declaredName = declaredName . subterm declaredName = declaredName . subterm
deriving instance (Declarations1 syntax, FreeVariables1 syntax) => Declarations (Term syntax ann) deriving instance Declarations1 syntax => Declarations (Term syntax ann)
instance (FreeVariables recur, Declarations1 syntax) => Declarations (TermF syntax ann recur) where instance (Declarations recur, Declarations1 syntax) => Declarations (TermF syntax ann recur) where
declaredName = liftDeclaredName freeVariables . termFOut declaredName = liftDeclaredName declaredName . termFOut
instance (Apply Declarations1 fs) => Declarations1 (Sum fs) where instance Apply Declarations1 fs => Declarations1 (Sum fs) where
liftDeclaredName f = apply @Declarations1 (liftDeclaredName f) liftDeclaredName f = apply @Declarations1 (liftDeclaredName f)
instance Declarations1 [] instance Declarations1 []

View File

@ -142,5 +142,8 @@ addresses = fromAddresses . map snd . flatPairs
instance Lower (Environment address) where lowerBound = Environment (lowerBound :| []) instance Lower (Environment address) where lowerBound = Environment (lowerBound :| [])
-- N.B. this show instance drops some information to avoid generating
-- an infinite string in certain cases. As such, two unequal
-- environments may produce equal outputs over Show.
instance Show address => Show (Environment address) where instance Show address => Show (Environment address) where
showsPrec d = showsUnaryWith showsPrec "Environment" d . flatPairs showsPrec d = showsUnaryWith showsPrec "Environment" d . flatPairs

View File

@ -52,15 +52,15 @@ class (Show1 constr, Foldable constr) => Evaluatable constr where
, Member (Env address) effects , Member (Env address) effects
, Member (Exc (LoopControl address)) effects , Member (Exc (LoopControl address)) effects
, Member (Exc (Return address)) effects , Member (Exc (Return address)) effects
, Member Fresh effects
, Member (Modules address) effects , Member (Modules address) effects
, Member (Reader ModuleInfo) effects , Member (Reader ModuleInfo) effects
, Member (Reader PackageInfo) effects , Member (Reader PackageInfo) effects
, Member (Reader Span) effects , Member (Reader Span) effects
, Member (Resumable (EnvironmentError address)) effects , Member (Resumable (EnvironmentError address)) effects
, Member (Resumable (Unspecialized value)) effects
, Member (Resumable EvalError) effects , Member (Resumable EvalError) effects
, Member (Resumable ResolutionError) effects , Member (Resumable ResolutionError) effects
, Member (Resumable (Unspecialized value)) effects , Member Fresh effects
, Member Trace effects , Member Trace effects
) )
=> SubtermAlgebra constr term (Evaluator address value effects (ValueRef address)) => SubtermAlgebra constr term (Evaluator address value effects (ValueRef address))
@ -154,24 +154,24 @@ instance HasPrelude 'PHP
instance HasPrelude 'Python where instance HasPrelude 'Python where
definePrelude _ = definePrelude _ =
define "print" builtInPrint define (name "print") builtInPrint
instance HasPrelude 'Ruby where instance HasPrelude 'Ruby where
definePrelude _ = do definePrelude _ = do
define "puts" builtInPrint define (name "puts") builtInPrint
defineClass "Object" [] $ do defineClass (name "Object") [] $ do
define "inspect" (lambda (const (box (string "<object>")))) define (name "inspect") (lambda (const (box (string "<object>"))))
instance HasPrelude 'TypeScript where instance HasPrelude 'TypeScript where
definePrelude _ = definePrelude _ =
defineNamespace "console" $ do defineNamespace (name "console") $ do
define "log" builtInPrint define (name "log") builtInPrint
instance HasPrelude 'JavaScript where instance HasPrelude 'JavaScript where
definePrelude _ = do definePrelude _ = do
defineNamespace "console" $ do defineNamespace (name "console") $ do
define "log" builtInPrint define (name "log") builtInPrint
-- Postludes -- Postludes
@ -206,7 +206,7 @@ instance HasPostlude 'JavaScript where
-- | The type of error thrown when failing to evaluate a term. -- | The type of error thrown when failing to evaluate a term.
data EvalError return where data EvalError return where
FreeVariablesError :: [Name] -> EvalError Name NoNameError :: EvalError Name
-- Indicates that our evaluator wasn't able to make sense of these literals. -- Indicates that our evaluator wasn't able to make sense of these literals.
IntegerFormatError :: Text -> EvalError Integer IntegerFormatError :: Text -> EvalError Integer
FloatFormatError :: Text -> EvalError Scientific FloatFormatError :: Text -> EvalError Scientific
@ -218,7 +218,7 @@ deriving instance Eq (EvalError return)
deriving instance Show (EvalError return) deriving instance Show (EvalError return)
instance Eq1 EvalError where instance Eq1 EvalError where
liftEq _ (FreeVariablesError a) (FreeVariablesError b) = a == b liftEq _ NoNameError NoNameError = True
liftEq _ DefaultExportError DefaultExportError = True liftEq _ DefaultExportError DefaultExportError = True
liftEq _ (ExportError a b) (ExportError c d) = (a == c) && (b == d) liftEq _ (ExportError a b) (ExportError c d) = (a == c) && (b == d)
liftEq _ (IntegerFormatError a) (IntegerFormatError b) = a == b liftEq _ (IntegerFormatError a) (IntegerFormatError b) = a == b

View File

@ -9,7 +9,7 @@ import Prologue
-- | Types which can contain unbound variables. -- | Types which can contain unbound variables.
class FreeVariables term where class FreeVariables term where
-- | The set of free variables in the given value. -- | The set of free variables in the given value.
freeVariables :: term -> [Name] freeVariables :: term -> Set Name
-- | A lifting of 'FreeVariables' to type constructors of kind @* -> *@. -- | A lifting of 'FreeVariables' to type constructors of kind @* -> *@.
@ -17,20 +17,11 @@ class FreeVariables term where
-- 'Foldable' types requiring no additional semantics to the set of free variables (e.g. types which do not bind any variables) can use (and even derive, with @-XDeriveAnyClass@) the default implementation. -- 'Foldable' types requiring no additional semantics to the set of free variables (e.g. types which do not bind any variables) can use (and even derive, with @-XDeriveAnyClass@) the default implementation.
class FreeVariables1 syntax where class FreeVariables1 syntax where
-- | Lift a function mapping each element to its set of free variables through a containing structure, collecting the results into a single set. -- | Lift a function mapping each element to its set of free variables through a containing structure, collecting the results into a single set.
liftFreeVariables :: (a -> [Name]) -> syntax a -> [Name] liftFreeVariables :: (a -> Set Name) -> syntax a -> Set Name
default liftFreeVariables :: (Foldable syntax) => (a -> [Name]) -> syntax a -> [Name] default liftFreeVariables :: (Foldable syntax) => (a -> Set Name) -> syntax a -> Set Name
liftFreeVariables = foldMap liftFreeVariables = foldMap
-- | Lift the 'freeVariables' method through a containing structure. instance FreeVariables t => FreeVariables (Subterm t a) where
freeVariables1 :: (FreeVariables1 t, FreeVariables a) => t a -> [Name]
freeVariables1 = liftFreeVariables freeVariables
freeVariable :: FreeVariables term => term -> Either [Name] Name
freeVariable term = case freeVariables term of
[n] -> Right n
xs -> Left xs
instance (FreeVariables t) => FreeVariables (Subterm t a) where
freeVariables = freeVariables . subterm freeVariables = freeVariables . subterm
deriving instance FreeVariables1 syntax => FreeVariables (Term syntax ann) deriving instance FreeVariables1 syntax => FreeVariables (Term syntax ann)
@ -38,10 +29,10 @@ deriving instance FreeVariables1 syntax => FreeVariables (Term syntax ann)
instance (FreeVariables recur, FreeVariables1 syntax) => FreeVariables (TermF syntax ann recur) where instance (FreeVariables recur, FreeVariables1 syntax) => FreeVariables (TermF syntax ann recur) where
freeVariables = liftFreeVariables freeVariables freeVariables = liftFreeVariables freeVariables
instance (FreeVariables1 syntax) => FreeVariables1 (TermF syntax ann) where instance FreeVariables1 syntax => FreeVariables1 (TermF syntax ann) where
liftFreeVariables f (In _ s) = liftFreeVariables f s liftFreeVariables f (In _ s) = liftFreeVariables f s
instance (Apply FreeVariables1 fs) => FreeVariables1 (Sum fs) where instance Apply FreeVariables1 fs => FreeVariables1 (Sum fs) where
liftFreeVariables f = apply @FreeVariables1 (liftFreeVariables f) liftFreeVariables f = apply @FreeVariables1 (liftFreeVariables f)
instance FreeVariables1 [] instance FreeVariables1 []

View File

@ -15,7 +15,6 @@ module Data.Abstract.ModuleTable
import Data.Abstract.Module import Data.Abstract.Module
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Semigroup
import GHC.Generics (Generic1) import GHC.Generics (Generic1)
import Prelude hiding (lookup) import Prelude hiding (lookup)
import Prologue import Prologue

View File

@ -15,9 +15,8 @@ import qualified Data.Char as Char
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as Text import qualified Data.Text as Text
import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy as LT
import Data.String
import Prologue import Prologue
import Proto3.Suite import Proto3.Suite
import qualified Proto3.Wire.Decode as Decode import qualified Proto3.Wire.Decode as Decode
import qualified Proto3.Wire.Encode as Encode import qualified Proto3.Wire.Encode as Encode
@ -32,7 +31,7 @@ instance HasDefault Name where
instance Primitive Name where instance Primitive Name where
encodePrimitive num (Name text) = Encode.text num (LT.fromStrict text) encodePrimitive num (Name text) = Encode.text num (LT.fromStrict text)
encodePrimitive num (I index) = Encode.int num index encodePrimitive num (I index) = Encode.int num index
decodePrimitive = Name . LT.toStrict <$> Decode.text <|> I <$> Decode.int decodePrimitive = Name . LT.toStrict <$> Decode.text <|> I <$> Decode.int
primType _ = Bytes primType _ = Bytes
@ -55,9 +54,6 @@ formatName (I i) = Text.pack $ '_' : (alphabet !! a) : replicate n 'ʹ'
where alphabet = ['a'..'z'] where alphabet = ['a'..'z']
(n, a) = i `divMod` length alphabet (n, a) = i `divMod` length alphabet
instance IsString Name where
fromString = Name . Text.pack
-- $ -- $
-- >>> I 0 -- >>> I 0
-- "_a" -- "_a"

View File

@ -48,8 +48,8 @@ instance ( Member (Allocator address Abstract) effects
instance ( Member (Allocator address Abstract) effects instance ( Member (Allocator address Abstract) effects
, Member (Env address) effects , Member (Env address) effects
, Member (Exc (Return address)) effects , Member (Exc (Return address)) effects
, Member Fresh effects
, Member NonDet effects , Member NonDet effects
, Member Fresh effects
) )
=> AbstractValue address Abstract effects where => AbstractValue address Abstract effects where
array _ = pure Abstract array _ = pure Abstract

View File

@ -2,6 +2,7 @@
module Data.Abstract.Value.Type module Data.Abstract.Value.Type
( Type (..) ( Type (..)
, TypeError (..) , TypeError (..)
, TypeMap
, runTypes , runTypes
, runTypesWith , runTypesWith
, unify , unify
@ -108,6 +109,7 @@ runTypesWith :: ( Effectful m
-> m effects a -> m effects a
runTypesWith with = runTypeMap . runTypeErrorWith with runTypesWith with = runTypeMap . runTypeErrorWith with
-- TODO: change my name?
newtype TypeMap = TypeMap { unTypeMap :: Map.Map TName Type } newtype TypeMap = TypeMap { unTypeMap :: Map.Map TName Type }
emptyTypeMap :: TypeMap emptyTypeMap :: TypeMap

View File

@ -8,7 +8,6 @@ module Data.Functor.Both
import Data.Bifunctor.Join as X import Data.Bifunctor.Join as X
import Data.Functor.Classes import Data.Functor.Classes
import Data.Semigroup
-- | A computation over both sides of a pair. -- | A computation over both sides of a pair.
type Both = Join (,) type Both = Join (,)

View File

@ -13,7 +13,6 @@ module Data.Functor.Classes.Generic
import Data.Functor.Classes import Data.Functor.Classes
import Data.List (intersperse) import Data.List (intersperse)
import Data.Semigroup
import GHC.Generics import GHC.Generics
import Text.Show (showListWith) import Text.Show (showListWith)

View File

@ -1,12 +1,12 @@
{-# LANGUAGE DeriveAnyClass, LambdaCase, ScopedTypeVariables #-} {-# LANGUAGE DeriveAnyClass, LambdaCase, ScopedTypeVariables #-}
module Data.Graph.Adjacency.Import module Data.Graph.Adjacency
( ImportGraph (..) ( AdjacencyList (..)
, Edge (..) , Edge (..)
, Tag , Tag
, Vertex (..) , Vertex (..)
, VertexType (..) , VertexType (..)
, graphToImportGraph , graphToAdjacencyList
, importGraphToGraph , importGraphToGraph
, tagGraph , tagGraph
, isCoherent , isCoherent
@ -57,7 +57,7 @@ instance PB.Primitive VertexType where
(PB.Enumerated (Right r)) -> pure r (PB.Enumerated (Right r)) -> pure r
other -> Prelude.fail ("VertexType decodeMessageField: unexpected value" <> show other) other -> Prelude.fail ("VertexType decodeMessageField: unexpected value" <> show other)
-- | A tag used on each vertext of a 'Graph' to convert to an 'ImportGraph'. -- | A tag used on each vertext of a 'Graph' to convert to an 'AdjacencyList'.
type Tag = Word64 type Tag = Word64
-- | A protobuf-compatible vertex type, with a unique 'Tag' identifier. -- | A protobuf-compatible vertex type, with a unique 'Tag' identifier.
@ -73,16 +73,16 @@ data Edge = Edge { edgeFrom :: Tag, edgeTo :: Tag }
deriving (Eq, Ord, Show, Generic, Hashable, PB.Named, PB.Message) deriving (Eq, Ord, Show, Generic, Hashable, PB.Named, PB.Message)
-- | An adjacency list-representation of a graph. You generally build these by calling -- | An adjacency list-representation of a graph. You generally build these by calling
-- 'graphToImportGraph' on an algebraic 'Graph'. This representation is less efficient and -- 'graphToAdjacencyList' on an algebraic 'Graph'. This representation is less efficient and
-- fluent than an ordinary 'Graph', but is more amenable to serialization. -- fluent than an ordinary 'Graph', but is more amenable to serialization.
data ImportGraph = ImportGraph data AdjacencyList = AdjacencyList
{ graphVertices :: PB.NestedVec Vertex { graphVertices :: PB.NestedVec Vertex
, graphEdges :: PB.NestedVec Edge , graphEdges :: PB.NestedVec Edge
} deriving (Eq, Ord, Show, Generic, PB.Named, PB.Message) } deriving (Eq, Ord, Show, Generic, PB.Named, PB.Message)
-- | Convert an algebraic graph to an adjacency list. -- | Convert an algebraic graph to an adjacency list.
graphToImportGraph :: Graph V.Vertex -> ImportGraph graphToAdjacencyList :: Graph V.Vertex -> AdjacencyList
graphToImportGraph = taggedGraphToImportGraph . tagGraph . simplify graphToAdjacencyList = taggedGraphToAdjacencyList . tagGraph . simplify
-- * Internal interface stuff -- * Internal interface stuff
@ -99,8 +99,8 @@ data Acc = Acc [Vertex] (HashSet Edge)
-- to build a 'Graph', avoiding inefficient vector concatenation. -- to build a 'Graph', avoiding inefficient vector concatenation.
-- Time complexity, given V vertices and E edges, is at least O(2V + 2E + (V * E * log E)), -- Time complexity, given V vertices and E edges, is at least O(2V + 2E + (V * E * log E)),
-- plus whatever overhead converting the graph to 'AdjacencyMap' may entail. -- plus whatever overhead converting the graph to 'AdjacencyMap' may entail.
taggedGraphToImportGraph :: Graph (V.Vertex, Tag) -> ImportGraph taggedGraphToAdjacencyList :: Graph (V.Vertex, Tag) -> AdjacencyList
taggedGraphToImportGraph = accumToAdj . adjMapToAccum . adjacencyMap . toGraph . simplify taggedGraphToAdjacencyList = accumToAdj . adjMapToAccum . adjacencyMap . toGraph . simplify
where adjMapToAccum :: Map (V.Vertex, Tag) (Set (V.Vertex, Tag)) -> Acc where adjMapToAccum :: Map (V.Vertex, Tag) (Set (V.Vertex, Tag)) -> Acc
adjMapToAccum = Map.foldlWithKey go (Acc [] mempty) adjMapToAccum = Map.foldlWithKey go (Acc [] mempty)
@ -108,8 +108,8 @@ taggedGraphToImportGraph = accumToAdj . adjMapToAccum . adjacencyMap . toGraph .
go (Acc vs es) (v, from) edges = Acc (vertexToPB v from : vs) (Set.foldr' (add . snd) es edges) go (Acc vs es) (v, from) edges = Acc (vertexToPB v from : vs) (Set.foldr' (add . snd) es edges)
where add = HashSet.insert . Edge from where add = HashSet.insert . Edge from
accumToAdj :: Acc -> ImportGraph accumToAdj :: Acc -> AdjacencyList
accumToAdj (Acc vs es) = ImportGraph (fromList vs) (fromList (toList es)) accumToAdj (Acc vs es) = AdjacencyList (fromList vs) (fromList (toList es))
vertexToPB :: V.Vertex -> Tag -> Vertex vertexToPB :: V.Vertex -> Tag -> Vertex
vertexToPB s = Vertex t (V.vertexName s) where vertexToPB s = Vertex t (V.vertexName s) where
@ -134,10 +134,10 @@ tagGraph = unwrap . traverse go where
modify' (HashMap.insert v next) modify' (HashMap.insert v next)
pure (v, next) pure (v, next)
-- | This is the reverse of 'graphToImportGraph'. Don't use this outside of a testing context. -- | This is the reverse of 'graphToAdjacencyList'. Don't use this outside of a testing context.
-- N.B. @importGraphToGraph . graphToImportGraph@ is 'id', but @graphToImportGraph . importGraphToGraph@ is not. -- N.B. @importGraphToGraph . graphToAdjacencyList@ is 'id', but @graphToAdjacencyList . importGraphToGraph@ is not.
importGraphToGraph :: ImportGraph -> Graph V.Vertex importGraphToGraph :: AdjacencyList -> Graph V.Vertex
importGraphToGraph (ImportGraph vs es) = simplify built importGraphToGraph (AdjacencyList vs es) = simplify built
where built = allEdges <> vertices unreferencedVertices where built = allEdges <> vertices unreferencedVertices
allEdges :: Graph V.Vertex allEdges :: Graph V.Vertex
@ -162,7 +162,7 @@ importGraphToGraph (ImportGraph vs es) = simplify built
-- | For debugging: returns True if all edges reference a valid vertex tag. -- | For debugging: returns True if all edges reference a valid vertex tag.
isCoherent :: ImportGraph -> Bool isCoherent :: AdjacencyList -> Bool
isCoherent (ImportGraph vs es) = all edgeValid es where isCoherent (AdjacencyList vs es) = all edgeValid es where
edgeValid (Edge a b) = HashSet.member a allTags && HashSet.member b allTags edgeValid (Edge a b) = HashSet.member a allTags && HashSet.member b allTags
allTags = HashSet.fromList (toList (vertexTag <$> vs)) allTags = HashSet.fromList (toList (vertexTag <$> vs))

View File

@ -8,6 +8,7 @@ module Data.Map.Monoidal
, insert , insert
, filterWithKey , filterWithKey
, pairs , pairs
, keys
, module Reducer , module Reducer
) where ) where
@ -37,6 +38,8 @@ insert key value = Map . Map.insert key value . unMap
filterWithKey :: (key -> value -> Bool) -> Map key value -> Map key value filterWithKey :: (key -> value -> Bool) -> Map key value -> Map key value
filterWithKey f = Map . Map.filterWithKey f . unMap filterWithKey f = Map . Map.filterWithKey f . unMap
keys :: Map key value -> [key]
keys = map fst . pairs
pairs :: Map key value -> [(key, value)] pairs :: Map key value -> [(key, value)]
pairs = Map.toList . unMap pairs = Map.toList . unMap

View File

@ -5,7 +5,6 @@ module Data.Semigroup.App
) where ) where
import Control.Applicative import Control.Applicative
import Data.Semigroup
-- $setup -- $setup
-- >>> import Test.QuickCheck -- >>> import Test.QuickCheck

View File

@ -5,12 +5,16 @@ module Data.Syntax where
import Data.Abstract.Evaluatable import Data.Abstract.Evaluatable
import Data.Aeson (ToJSON(..), object) import Data.Aeson (ToJSON(..), object)
import Data.AST import Data.AST
import Data.Char (toLower)
import Data.JSON.Fields import Data.JSON.Fields
import Data.Range import Data.Range
import Data.Record import Data.Record
import qualified Data.Set as Set
import Data.Span import Data.Span
import Data.Sum import Data.Sum
import Data.Term import Data.Term
import GHC.Types (Constraint)
import GHC.TypeLits
import Diffing.Algorithm hiding (Empty) import Diffing.Algorithm hiding (Empty)
import Prelude import Prelude
import Prologue import Prologue
@ -18,12 +22,9 @@ import qualified Assigning.Assignment as Assignment
import qualified Data.Error as Error import qualified Data.Error as Error
import Proto3.Suite.Class import Proto3.Suite.Class
import Proto3.Wire.Types import Proto3.Wire.Types
import GHC.Types (Constraint)
import GHC.TypeLits
import qualified Proto3.Suite.DotProto as Proto import qualified Proto3.Suite.DotProto as Proto
import qualified Proto3.Wire.Encode as Encode import qualified Proto3.Wire.Encode as Encode
import qualified Proto3.Wire.Decode as Decode import qualified Proto3.Wire.Decode as Decode
import Data.Char (toLower)
-- Combinators -- Combinators
@ -166,7 +167,7 @@ instance Evaluatable Identifier where
eval (Identifier name) = pure (LvalLocal name) eval (Identifier name) = pure (LvalLocal name)
instance FreeVariables1 Identifier where instance FreeVariables1 Identifier where
liftFreeVariables _ (Identifier x) = pure x liftFreeVariables _ (Identifier x) = Set.singleton x
instance Declarations1 Identifier where instance Declarations1 Identifier where
liftDeclaredName _ (Identifier x) = pure x liftDeclaredName _ (Identifier x) = pure x

View File

@ -4,13 +4,13 @@ module Data.Syntax.Declaration where
import qualified Data.Abstract.Environment as Env import qualified Data.Abstract.Environment as Env
import Data.Abstract.Evaluatable import Data.Abstract.Evaluatable
import Data.JSON.Fields import Data.JSON.Fields
import qualified Data.Set as Set (fromList) import qualified Data.Set as Set
import Diffing.Algorithm import Diffing.Algorithm
import Prologue import Prologue
import Proto3.Suite.Class import Proto3.Suite.Class
data Function a = Function { functionContext :: ![a], functionName :: !a, functionParameters :: ![a], functionBody :: !a } data Function a = Function { functionContext :: ![a], functionName :: !a, functionParameters :: ![a], functionBody :: !a }
deriving (Eq, Ord, Show, Foldable, Traversable, Functor, Generic1, Hashable1, Mergeable, FreeVariables1, Declarations1, ToJSONFields1, Named1, Message1) deriving (Eq, Ord, Show, Foldable, Traversable, Functor, Generic1, Hashable1, Mergeable, ToJSONFields1, Named1, Message1)
instance Diffable Function where instance Diffable Function where
equivalentBySubterm = Just . functionName equivalentBySubterm = Just . functionName
@ -24,18 +24,21 @@ instance Show1 Function where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Function where instance Evaluatable Function where
eval Function{..} = do eval Function{..} = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm functionName) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm functionName))
(_, addr) <- letrec name (closure (paramNames functionParameters) (Set.fromList (freeVariables functionBody)) (subtermAddress functionBody)) (_, addr) <- letrec name (closure (paramNames functionParameters) (freeVariables functionBody) (subtermAddress functionBody))
bind name addr bind name addr
pure (Rval addr) pure (Rval addr)
where paramNames = foldMap (freeVariables . subterm) where paramNames = foldMap (maybeToList . declaredName . subterm)
instance Declarations a => Declarations (Function a) where instance Declarations1 Function where
declaredName Function{..} = declaredName functionName liftDeclaredName declaredName = declaredName . functionName
instance FreeVariables1 Function where
liftFreeVariables freeVariables f@Function{..} = foldMap freeVariables f `Set.difference` foldMap freeVariables functionParameters
data Method a = Method { methodContext :: ![a], methodReceiver :: !a, methodName :: !a, methodParameters :: ![a], methodBody :: !a } data Method a = Method { methodContext :: ![a], methodReceiver :: !a, methodName :: !a, methodParameters :: ![a], methodBody :: !a }
deriving (Eq, Ord, Show, Foldable, Traversable, Functor, Generic1, Hashable1, Mergeable, FreeVariables1, Declarations1, ToJSONFields1, Named1, Message1) deriving (Eq, Ord, Show, Foldable, Traversable, Functor, Generic1, Hashable1, Mergeable, ToJSONFields1, Named1, Message1)
instance Eq1 Method where liftEq = genericLiftEq instance Eq1 Method where liftEq = genericLiftEq
instance Ord1 Method where liftCompare = genericLiftCompare instance Ord1 Method where liftCompare = genericLiftCompare
@ -48,11 +51,17 @@ instance Diffable Method where
-- local environment. -- local environment.
instance Evaluatable Method where instance Evaluatable Method where
eval Method{..} = do eval Method{..} = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm methodName) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm methodName))
(_, addr) <- letrec name (closure (paramNames methodParameters) (Set.fromList (freeVariables methodBody)) (subtermAddress methodBody)) (_, addr) <- letrec name (closure (paramNames methodParameters) (freeVariables methodBody) (subtermAddress methodBody))
bind name addr bind name addr
pure (Rval addr) pure (Rval addr)
where paramNames = foldMap (freeVariables . subterm) where paramNames = foldMap (maybeToList . declaredName . subterm)
instance Declarations1 Method where
liftDeclaredName declaredName = declaredName . methodName
instance FreeVariables1 Method where
liftFreeVariables freeVariables m@Method{..} = foldMap freeVariables m `Set.difference` foldMap freeVariables methodParameters
-- | A method signature in TypeScript or a method spec in Go. -- | A method signature in TypeScript or a method spec in Go.
@ -162,7 +171,7 @@ instance Show1 Class where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Class where instance Evaluatable Class where
eval Class{..} = do eval Class{..} = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm classIdentifier) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm classIdentifier))
supers <- traverse subtermAddress classSuperclasses supers <- traverse subtermAddress classSuperclasses
(_, addr) <- letrec name $ do (_, addr) <- letrec name $ do
void $ subtermValue classBody void $ subtermValue classBody
@ -244,7 +253,7 @@ instance Show1 TypeAlias where liftShowsPrec = genericLiftShowsPrec
-- TODO: Implement Eval instance for TypeAlias -- TODO: Implement Eval instance for TypeAlias
instance Evaluatable TypeAlias where instance Evaluatable TypeAlias where
eval TypeAlias{..} = do eval TypeAlias{..} = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable (subterm typeAliasIdentifier)) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm typeAliasIdentifier))
v <- subtermValue typeAliasKind v <- subtermValue typeAliasKind
addr <- lookupOrAlloc name addr <- lookupOrAlloc name
assign addr v assign addr v

View File

@ -99,7 +99,7 @@ instance Show1 Let where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Let where instance Evaluatable Let where
eval Let{..} = do eval Let{..} = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm letVariable) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm letVariable))
addr <- snd <$> letrec name (subtermValue letValue) addr <- snd <$> letrec name (subtermValue letValue)
Rval <$> locally (bind name addr *> subtermAddress letBody) Rval <$> locally (bind name addr *> subtermAddress letBody)

View File

@ -84,7 +84,7 @@ instance Show1 QualifiedImport where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable QualifiedImport where instance Evaluatable QualifiedImport where
eval (QualifiedImport importPath aliasTerm) = do eval (QualifiedImport importPath aliasTerm) = do
paths <- resolveGoImport importPath paths <- resolveGoImport importPath
alias <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm aliasTerm) alias <- maybeM (throwEvalError NoNameError) (declaredName (subterm aliasTerm))
void . letrec' alias $ \addr -> do void . letrec' alias $ \addr -> do
makeNamespace alias addr Nothing $ for_ paths $ \p -> do makeNamespace alias addr Nothing $ for_ paths $ \p -> do
traceResolve (unPath importPath) p traceResolve (unPath importPath) p

View File

@ -489,6 +489,9 @@ namespaceNameAsPrefix = symbol NamespaceNameAsPrefix *> children (term namespace
namespaceName :: Assignment Term namespaceName :: Assignment Term
namespaceName = makeTerm <$> symbol NamespaceName <*> children (Syntax.NamespaceName <$> someTerm' name) namespaceName = makeTerm <$> symbol NamespaceName <*> children (Syntax.NamespaceName <$> someTerm' name)
namespaceName' :: Assignment (NonEmpty Term)
namespaceName' = symbol NamespaceName *> children (someTerm' name)
updateExpression :: Assignment Term updateExpression :: Assignment Term
updateExpression = makeTerm <$> symbol UpdateExpression <*> children (Syntax.Update <$> term expression) updateExpression = makeTerm <$> symbol UpdateExpression <*> children (Syntax.Update <$> term expression)
@ -704,7 +707,7 @@ traitAliasAsClause :: Assignment Term
traitAliasAsClause = makeTerm <$> symbol TraitAliasAsClause <*> children (Syntax.AliasAs <$> term (classConstantAccessExpression <|> name) <*> (term visibilityModifier <|> emptyTerm) <*> (term name <|> emptyTerm)) traitAliasAsClause = makeTerm <$> symbol TraitAliasAsClause <*> children (Syntax.AliasAs <$> term (classConstantAccessExpression <|> name) <*> (term visibilityModifier <|> emptyTerm) <*> (term name <|> emptyTerm))
namespaceDefinition :: Assignment Term namespaceDefinition :: Assignment Term
namespaceDefinition = makeTerm <$> symbol NamespaceDefinition <*> children (Syntax.Namespace <$> (term namespaceName <|> emptyTerm) <*> (term compoundStatement <|> emptyTerm)) namespaceDefinition = makeTerm <$> symbol NamespaceDefinition <*> children (Syntax.Namespace <$> (toList <$> namespaceName' <|> pure []) <*> (term compoundStatement <|> emptyTerm))
namespaceUseDeclaration :: Assignment Term namespaceUseDeclaration :: Assignment Term
namespaceUseDeclaration = makeTerm <$> symbol NamespaceUseDeclaration <*> children (Syntax.NamespaceUseDeclaration <$> namespaceUseDeclaration = makeTerm <$> symbol NamespaceUseDeclaration <*> children (Syntax.NamespaceUseDeclaration <$>

View File

@ -362,7 +362,7 @@ instance Ord1 NamespaceUseGroupClause where liftCompare = genericLiftCompare
instance Show1 NamespaceUseGroupClause where liftShowsPrec = genericLiftShowsPrec instance Show1 NamespaceUseGroupClause where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable NamespaceUseGroupClause instance Evaluatable NamespaceUseGroupClause
data Namespace a = Namespace { namespaceName :: a, namespaceBody :: a } data Namespace a = Namespace { namespaceName :: [a], namespaceBody :: a }
deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, Mergeable, Ord, Show, ToJSONFields1, Traversable) deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, Mergeable, Ord, Show, ToJSONFields1, Traversable)
instance Eq1 Namespace where liftEq = genericLiftEq instance Eq1 Namespace where liftEq = genericLiftEq
@ -370,16 +370,20 @@ instance Ord1 Namespace where liftCompare = genericLiftCompare
instance Show1 Namespace where liftShowsPrec = genericLiftShowsPrec instance Show1 Namespace where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Namespace where instance Evaluatable Namespace where
eval Namespace{..} = rvalBox =<< go (freeVariables (subterm namespaceName)) eval Namespace{..} = rvalBox =<< go (declaredName . subterm <$> namespaceName)
where where
-- Each namespace name creates a closure over the subsequent namespace closures -- Each namespace name creates a closure over the subsequent namespace closures
go (name:x:xs) = letrec' name $ \addr -> go (n:x:xs) = do
go (x:xs) <* makeNamespace name addr Nothing (pure ()) name <- maybeM (throwResumable NoNameError) n
letrec' name $ \addr ->
go (x:xs) <* makeNamespace name addr Nothing (pure ())
-- The last name creates a closure over the namespace body. -- The last name creates a closure over the namespace body.
go names = do go [n] = do
name <- maybeM (throwEvalError (FreeVariablesError [])) (listToMaybe names) name <- maybeM (throwResumable NoNameError) n
letrec' name $ \addr -> letrec' name $ \addr ->
subtermValue namespaceBody *> makeNamespace name addr Nothing (pure ()) subtermValue namespaceBody *> makeNamespace name addr Nothing (pure ())
-- The absence of names implies global scope, cf http://php.net/manual/en/language.namespaces.definitionmultiple.php
go [] = subtermValue namespaceBody
data TraitDeclaration a = TraitDeclaration { traitName :: a, traitStatements :: [a] } data TraitDeclaration a = TraitDeclaration { traitName :: a, traitStatements :: [a] }
deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, Mergeable, Ord, Show, ToJSONFields1, Traversable) deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, Mergeable, Ord, Show, ToJSONFields1, Traversable)

View File

@ -168,7 +168,7 @@ instance Evaluatable QualifiedAliasedImport where
for_ (NonEmpty.init modulePaths) require for_ (NonEmpty.init modulePaths) require
-- Evaluate and import the last module, aliasing and updating the environment -- Evaluate and import the last module, aliasing and updating the environment
alias <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm aliasTerm) alias <- maybeM (throwEvalError NoNameError) (declaredName (subterm aliasTerm))
rvalBox =<< letrec' alias (\addr -> do rvalBox =<< letrec' alias (\addr -> do
let path = NonEmpty.last modulePaths let path = NonEmpty.last modulePaths
unit <$ makeNamespace alias addr Nothing (void (bindAll . fst =<< require path))) unit <$ makeNamespace alias addr Nothing (void (bindAll . fst =<< require path)))

View File

@ -1,4 +1,4 @@
{-# LANGUAGE DeriveAnyClass, DuplicateRecordFields #-} {-# LANGUAGE DeriveAnyClass, DuplicateRecordFields, TupleSections #-}
module Language.Ruby.Syntax where module Language.Ruby.Syntax where
import Control.Monad (unless) import Control.Monad (unless)
@ -81,7 +81,7 @@ doRequire :: ( AbstractValue address value effects
doRequire path = do doRequire path = do
result <- lookupModule path result <- lookupModule path
case result of case result of
Nothing -> flip (,) (boolean True) . fst <$> load path Nothing -> (, boolean True) . fst <$> load path
Just (env, _) -> pure (env, boolean False) Just (env, _) -> pure (env, boolean False)
@ -132,7 +132,7 @@ instance Show1 Class where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Class where instance Evaluatable Class where
eval Class{..} = do eval Class{..} = do
super <- traverse subtermAddress classSuperClass super <- traverse subtermAddress classSuperClass
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm classIdentifier) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm classIdentifier))
rvalBox =<< letrec' name (\addr -> rvalBox =<< letrec' name (\addr ->
makeNamespace name addr super (void (subtermAddress classBody))) makeNamespace name addr super (void (subtermAddress classBody)))
@ -145,7 +145,7 @@ instance Show1 Module where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Module where instance Evaluatable Module where
eval (Module iden xs) = do eval (Module iden xs) = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm iden) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm iden))
rvalBox =<< letrec' name (\addr -> rvalBox =<< letrec' name (\addr ->
makeNamespace name addr Nothing (void (eval xs))) makeNamespace name addr Nothing (void (eval xs)))

View File

@ -189,7 +189,7 @@ instance Show1 JavaScriptRequire where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable JavaScriptRequire where instance Evaluatable JavaScriptRequire where
eval (JavaScriptRequire aliasTerm importPath) = do eval (JavaScriptRequire aliasTerm importPath) = do
modulePath <- resolveWithNodejsStrategy importPath javascriptExtensions modulePath <- resolveWithNodejsStrategy importPath javascriptExtensions
alias <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm aliasTerm) alias <- maybeM (throwEvalError NoNameError) (declaredName (subterm aliasTerm))
rvalBox =<< evalRequire modulePath alias rvalBox =<< evalRequire modulePath alias
@ -203,7 +203,7 @@ instance Show1 QualifiedAliasedImport where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable QualifiedAliasedImport where instance Evaluatable QualifiedAliasedImport where
eval (QualifiedAliasedImport aliasTerm importPath) = do eval (QualifiedAliasedImport aliasTerm importPath) = do
modulePath <- resolveWithNodejsStrategy importPath typescriptExtensions modulePath <- resolveWithNodejsStrategy importPath typescriptExtensions
alias <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm aliasTerm) alias <- maybeM (throwEvalError NoNameError) (declaredName (subterm aliasTerm))
rvalBox =<< evalRequire modulePath alias rvalBox =<< evalRequire modulePath alias
newtype SideEffectImport a = SideEffectImport { sideEffectImportFrom :: ImportPath } newtype SideEffectImport a = SideEffectImport { sideEffectImportFrom :: ImportPath }
@ -268,10 +268,10 @@ instance Show1 DefaultExport where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable DefaultExport where instance Evaluatable DefaultExport where
eval (DefaultExport term) = do eval (DefaultExport term) = do
v <- subtermValue term
case declaredName term of case declaredName term of
Just name -> do Just name -> do
addr <- lookupOrAlloc name addr <- lookupOrAlloc name
v <- subtermValue term
assign addr v assign addr v
export name name Nothing export name name Nothing
bind name addr bind name addr
@ -674,7 +674,7 @@ instance Show1 Module where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Module where instance Evaluatable Module where
eval (Module iden xs) = do eval (Module iden xs) = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm iden) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm iden))
rvalBox =<< letrec' name (\addr -> rvalBox =<< letrec' name (\addr ->
makeNamespace name addr Nothing (void (eval xs))) makeNamespace name addr Nothing (void (eval xs)))
@ -688,7 +688,7 @@ instance Show1 InternalModule where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable InternalModule where instance Evaluatable InternalModule where
eval (InternalModule iden xs) = do eval (InternalModule iden xs) = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm iden) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm iden))
rvalBox =<< letrec' name (\addr -> rvalBox =<< letrec' name (\addr ->
makeNamespace name addr Nothing (void (eval xs))) makeNamespace name addr Nothing (void (eval xs)))
@ -739,7 +739,7 @@ instance Declarations a => Declarations (AbstractClass a) where
instance Evaluatable AbstractClass where instance Evaluatable AbstractClass where
eval AbstractClass{..} = do eval AbstractClass{..} = do
name <- either (throwEvalError . FreeVariablesError) pure (freeVariable $ subterm abstractClassIdentifier) name <- maybeM (throwEvalError NoNameError) (declaredName (subterm abstractClassIdentifier))
supers <- traverse subtermAddress classHeritage supers <- traverse subtermAddress classHeritage
(v, addr) <- letrec name $ do (v, addr) <- letrec name $ do
void $ subtermValue classBody void $ subtermValue classBody

View File

@ -1,3 +1,5 @@
{-# LANGUAGE LambdaCase #-}
module Semantic.Config where module Semantic.Config where
import Network.BSD import Network.BSD
@ -82,16 +84,18 @@ withTelemetry config action =
withLoggerFromConfig :: Config -> (LogQueue -> IO c) -> IO c withLoggerFromConfig :: Config -> (LogQueue -> IO c) -> IO c
withLoggerFromConfig Config{..} = withLogger opts configMaxTelemetyQueueSize withLoggerFromConfig Config{..} = withLogger opts configMaxTelemetyQueueSize
where opts = LogOptions { where opts = LogOptions { logOptionsLevel = optionsLogLevel configOptions
logOptionsLevel = optionsLogLevel configOptions , logOptionsFormatter = configLogFormatter
, logOptionsFormatter = configLogFormatter , logOptionsContext = logOptionsContext' configIsTerminal
, logOptionsContext = }
[ ("app", configAppName) logOptionsContext' = \case
, ("pid", show configProcessID) False -> [ ("app", configAppName)
, ("hostname", configHostName) , ("pid", show configProcessID)
, ("sha", buildSHA) , ("hostname", configHostName)
] <> [("request_id", x) | x <- toList (optionsRequestID configOptions) ] , ("sha", buildSHA)
} ] <> [("request_id", x) | x <- toList (optionsRequestID configOptions) ]
_ -> []
withHaystackFromConfig :: Config -> Haystack.ErrorLogger -> (HaystackQueue -> IO c) -> IO c withHaystackFromConfig :: Config -> Haystack.ErrorLogger -> (HaystackQueue -> IO c) -> IO c
withHaystackFromConfig Config{..} errorLogger = withHaystackFromConfig Config{..} errorLogger =

View File

@ -1,11 +1,11 @@
{-# LANGUAGE GADTs, ScopedTypeVariables, TypeOperators #-} {-# LANGUAGE GADTs, ScopedTypeVariables, TypeOperators #-}
module Semantic.Graph module Semantic.Graph
( runGraph ( runGraph
, runCallGraph
, runImportGraph , runImportGraph
, GraphType(..) , GraphType(..)
, Graph , Graph
, Vertex , Vertex
, GraphEff(..)
, ImportGraphEff(..) , ImportGraphEff(..)
, style , style
, parsePackage , parsePackage
@ -17,10 +17,14 @@ module Semantic.Graph
, resumingAddressError , resumingAddressError
, resumingValueError , resumingValueError
, resumingEnvironmentError , resumingEnvironmentError
, resumingTypeError
) where ) where
import Prelude hiding (readFile) import Prelude hiding (readFile)
import Analysis.Abstract.Caching
import Analysis.Abstract.Collecting
import Analysis.Abstract.Graph as Graph import Analysis.Abstract.Graph as Graph
import Control.Abstract import Control.Abstract
import Control.Monad.Effect (reinterpret) import Control.Monad.Effect (reinterpret)
@ -29,15 +33,21 @@ import Data.Abstract.Evaluatable
import Data.Abstract.Module import Data.Abstract.Module
import qualified Data.Abstract.ModuleTable as ModuleTable import qualified Data.Abstract.ModuleTable as ModuleTable
import Data.Abstract.Package as Package import Data.Abstract.Package as Package
import Data.Abstract.Value.Abstract
import Data.Abstract.Value.Type
import Data.Abstract.Value.Concrete (Value, ValueError (..), runValueErrorWith) import Data.Abstract.Value.Concrete (Value, ValueError (..), runValueErrorWith)
import Data.Graph import Data.Graph
import Data.Project import Data.Project
import Data.Record import Data.Record
import qualified Data.Syntax as Syntax
import Data.Term import Data.Term
import Data.Text (pack) import Data.Text (pack)
import Language.Haskell.HsColour
import Language.Haskell.HsColour.Colourise
import Parsing.Parser import Parsing.Parser
import Prologue hiding (MonadError (..)) import Prologue hiding (MonadError (..), TypeError (..))
import Semantic.Task as Task import Semantic.Task as Task
import Text.Show.Pretty (ppShow)
data GraphType = ImportGraph | CallGraph data GraphType = ImportGraph | CallGraph
@ -55,52 +65,51 @@ runGraph ImportGraph _ project
runGraph CallGraph includePackages project runGraph CallGraph includePackages project
| SomeAnalysisParser parser lang <- someAnalysisParser (Proxy :: Proxy AnalysisClasses) (projectLanguage project) = do | SomeAnalysisParser parser lang <- someAnalysisParser (Proxy :: Proxy AnalysisClasses) (projectLanguage project) = do
package <- parsePackage parser project package <- parsePackage parser project
modules <- runImportGraph lang package modules <- topologicalSort <$> runImportGraph lang package
let analyzeTerm = withTermSpans . graphingTerms runCallGraph lang includePackages modules package
analyzeModule = (if includePackages then graphingPackages else id) . graphingModules
extractGraph (_, (_, (graph, _))) = simplify graph runCallGraph :: ( HasField ann Span
runGraphAnalysis , Element Syntax.Identifier syntax
= runState lowerBound , Base term ~ TermF (Sum syntax) (Record ann)
. runFresh 0 , Ord term
. resumingLoadError , Corecursive term
. resumingUnspecialized , Declarations term
. resumingEnvironmentError , Evaluatable (Base term)
. resumingEvalError , FreeVariables term
. resumingResolutionError , HasPrelude lang
. resumingAddressError , HasPostlude lang
. resumingValueError , Member Trace effs
. runTermEvaluator @_ @_ @(Value (Hole (Located Precise)) (GraphEff _ effs)) , Recursive term
. graphing , Effects effs
. runReader (packageInfo package) )
. runReader lowerBound => Proxy lang
. runReader lowerBound -> Bool
. raiseHandler (runModules (ModuleTable.modulePaths (packageModules package))) -> [Module term]
extractGraph <$> runEvaluator (runGraphAnalysis (evaluate lang analyzeModule analyzeTerm (topologicalSort modules))) -> Package term
-> Eff effs (Graph Vertex)
runCallGraph lang includePackages modules package = do
let analyzeTerm = withTermSpans . graphingTerms . cachingTerms
analyzeModule = (if includePackages then graphingPackages else id) . convergingModules . graphingModules
extractGraph (_, (_, (graph, _))) = simplify graph
runGraphAnalysis
= runState (lowerBound @(Heap (Hole (Located Monovariant)) All Abstract))
. runFresh 0
. resumingLoadError
. resumingUnspecialized
. resumingEnvironmentError
. resumingEvalError
. resumingResolutionError
. resumingAddressError
. runTermEvaluator @_ @(Hole (Located Monovariant)) @Abstract
. graphing
. caching @[]
. runReader (packageInfo package)
. runReader (lowerBound @Span)
. providingLiveSet
. runReader (lowerBound @(ModuleTable (NonEmpty (Module (ModuleResult (Hole (Located Monovariant)))))))
. raiseHandler (runModules (ModuleTable.modulePaths (packageModules package)))
extractGraph <$> runEvaluator (runGraphAnalysis (evaluate lang analyzeModule analyzeTerm modules))
-- | The full list of effects in flight during the evaluation of terms. This, and other @newtype@s like it, are necessary to type 'Value', since the bodies of closures embed evaluators. This would otherwise require cycles in the effect list (i.e. references to @effects@ within @effects@ itself), which the typechecker forbids.
newtype GraphEff address outerEffects a = GraphEff
{ runGraphEff :: Eff ( Exc (LoopControl address)
': Exc (Return address)
': Env address
': Allocator address (Value address (GraphEff address outerEffects))
': Reader ModuleInfo
': Modules address
': Reader (ModuleTable (NonEmpty (Module (ModuleResult address))))
': Reader Span
': Reader PackageInfo
': State (Graph Vertex)
': Resumable (ValueError address (GraphEff address outerEffects))
': Resumable (AddressError address (Value address (GraphEff address outerEffects)))
': Resumable ResolutionError
': Resumable EvalError
': Resumable (EnvironmentError address)
': Resumable (Unspecialized (Value address (GraphEff address outerEffects)))
': Resumable (LoadError address)
': Fresh
': State (Heap address Latest (Value address (GraphEff address outerEffects)))
': outerEffects
) a
}
runImportGraph :: forall effs lang term. runImportGraph :: forall effs lang term.
@ -176,7 +185,7 @@ parsePackage parser project@Project{..} = do
p <- parseModules parser project p <- parseModules parser project
resMap <- Task.resolutionMap project resMap <- Task.resolutionMap project
let pkg = Package.fromModules n p resMap let pkg = Package.fromModules n p resMap
pkg <$ trace ("project: " <> show (() <$ pkg)) pkg <$ trace ("project: " <> prettyShow (() <$ pkg))
where where
n = name (projectName project) n = name (projectName project)
@ -201,34 +210,34 @@ withTermSpans :: ( HasField fields Span
withTermSpans recur term = withCurrentSpan (getField (termFAnnotation term)) (recur term) withTermSpans recur term = withCurrentSpan (getField (termFAnnotation term)) (recur term)
resumingResolutionError :: (Applicative (m effects), Effectful m, Member Trace effects, Effects effects) => m (Resumable ResolutionError ': effects) a -> m effects a resumingResolutionError :: (Applicative (m effects), Effectful m, Member Trace effects, Effects effects) => m (Resumable ResolutionError ': effects) a -> m effects a
resumingResolutionError = runResolutionErrorWith (\ err -> trace ("ResolutionError:" <> show err) *> case err of resumingResolutionError = runResolutionErrorWith (\ err -> trace ("ResolutionError: " <> prettyShow err) *> case err of
NotFoundError nameToResolve _ _ -> pure nameToResolve NotFoundError nameToResolve _ _ -> pure nameToResolve
GoImportError pathToResolve -> pure [pathToResolve]) GoImportError pathToResolve -> pure [pathToResolve])
resumingLoadError :: (Member Trace effects, AbstractHole address, Effects effects) => Evaluator address value (Resumable (LoadError address) ': effects) a -> Evaluator address value effects a resumingLoadError :: (Member Trace effects, AbstractHole address, Effects effects) => Evaluator address value (Resumable (LoadError address) ': effects) a -> Evaluator address value effects a
resumingLoadError = runLoadErrorWith (\ (ModuleNotFound path) -> trace ("LoadError: " <> path) $> (lowerBound, hole)) resumingLoadError = runLoadErrorWith (\ (ModuleNotFound path) -> trace ("LoadError: " <> path) $> (lowerBound, hole))
resumingEvalError :: (Member Trace effects, Effects effects) => Evaluator address value (Resumable EvalError ': effects) a -> Evaluator address value effects a resumingEvalError :: (Member Fresh effects, Member Trace effects, Effects effects) => Evaluator address value (Resumable EvalError ': effects) a -> Evaluator address value effects a
resumingEvalError = runEvalErrorWith (\ err -> trace ("EvalError" <> show err) *> case err of resumingEvalError = runEvalErrorWith (\ err -> trace ("EvalError:" <> prettyShow err) *> case err of
DefaultExportError{} -> pure () DefaultExportError{} -> pure ()
ExportError{} -> pure () ExportError{} -> pure ()
IntegerFormatError{} -> pure 0 IntegerFormatError{} -> pure 0
FloatFormatError{} -> pure 0 FloatFormatError{} -> pure 0
RationalFormatError{} -> pure 0 RationalFormatError{} -> pure 0
FreeVariablesError names -> pure (fromMaybeLast "unknown" names)) NoNameError -> gensym)
resumingUnspecialized :: (Member Trace effects, AbstractHole value, Effects effects) => Evaluator address value (Resumable (Unspecialized value) ': effects) a -> Evaluator address value effects a resumingUnspecialized :: (Member Trace effects, AbstractHole value, Effects effects) => Evaluator address value (Resumable (Unspecialized value) ': effects) a -> Evaluator address value effects a
resumingUnspecialized = runUnspecializedWith (\ err@(Unspecialized _) -> trace ("Unspecialized:" <> show err) $> hole) resumingUnspecialized = runUnspecializedWith (\ err@(Unspecialized _) -> trace ("Unspecialized: " <> prettyShow err) $> hole)
resumingAddressError :: (AbstractHole value, Lower (Cell address value), Member Trace effects, Show address, Effects effects) => Evaluator address value (Resumable (AddressError address value) ': effects) a -> Evaluator address value effects a resumingAddressError :: (AbstractHole value, Lower (Cell address value), Member Trace effects, Show address, Effects effects) => Evaluator address value (Resumable (AddressError address value) ': effects) a -> Evaluator address value effects a
resumingAddressError = runAddressErrorWith (\ err -> trace ("AddressError:" <> show err) *> case err of resumingAddressError = runAddressErrorWith (\ err -> trace ("AddressError: " <> prettyShow err) *> case err of
UnallocatedAddress _ -> pure lowerBound UnallocatedAddress _ -> pure lowerBound
UninitializedAddress _ -> pure hole) UninitializedAddress _ -> pure hole)
resumingValueError :: (Member Trace effects, Show address, Effects effects) => Evaluator address (Value address body) (Resumable (ValueError address body) ': effects) a -> Evaluator address (Value address body) effects a resumingValueError :: (Member Trace effects, Show address, Effects effects) => Evaluator address (Value address body) (Resumable (ValueError address body) ': effects) a -> Evaluator address (Value address body) effects a
resumingValueError = runValueErrorWith (\ err -> trace ("ValueError" <> show err) *> case err of resumingValueError = runValueErrorWith (\ err -> trace ("ValueError: " <> prettyShow err) *> case err of
CallError val -> pure val CallError val -> pure val
StringError val -> pure (pack (show val)) StringError val -> pure (pack (prettyShow val))
BoolError{} -> pure True BoolError{} -> pure True
BoundsError{} -> pure hole BoundsError{} -> pure hole
IndexError{} -> pure hole IndexError{} -> pure hole
@ -245,3 +254,17 @@ resumingEnvironmentError :: (AbstractHole address, Effects effects) => Evaluator
resumingEnvironmentError resumingEnvironmentError
= runState [] = runState []
. reinterpret (\ (Resumable (FreeVariable name)) -> modify' (name :) $> hole) . reinterpret (\ (Resumable (FreeVariable name)) -> modify' (name :) $> hole)
resumingTypeError :: ( Alternative (m address Type (State TypeMap ': effects))
, Effects effects
, Effectful (m address Type)
, Member Trace effects
)
=> m address Type (Resumable TypeError ': State TypeMap ': effects) a
-> m address Type effects a
resumingTypeError = runTypesWith (\err -> trace ("TypeError: " <> prettyShow err) *> case err of
UnificationError l r -> pure l <|> pure r
InfiniteType _ r -> pure r)
prettyShow :: Show a => a -> String
prettyShow = hscolour TTY defaultColourPrefs False False "" False . ppShow

View File

@ -102,6 +102,16 @@ evalTypeScriptProject = justEvaluating <=< evaluateProject (Proxy :: Proxy 'Lang
typecheckGoFile = checking <=< evaluateProjectWithCaching (Proxy :: Proxy 'Language.Go) goParser Language.Go typecheckGoFile = checking <=< evaluateProjectWithCaching (Proxy :: Proxy 'Language.Go) goParser Language.Go
callGraphRubyProject paths = runTaskWithOptions debugOptions $ do
let proxy = Proxy @'Language.Ruby
let lang = Language.Ruby
blobs <- catMaybes <$> traverse readFile (flip File lang <$> paths)
package <- parsePackage rubyParser (Project (takeDirectory (maybe "/" fst (uncons paths))) blobs lang [])
modules <- topologicalSort <$> runImportGraph proxy package
x <- runCallGraph proxy False modules package
pure (x, modules)
-- Evaluate a project consisting of the listed paths. -- Evaluate a project consisting of the listed paths.
evaluateProject proxy parser lang paths = withOptions debugOptions $ \ config logger statter -> evaluateProject proxy parser lang paths = withOptions debugOptions $ \ config logger statter ->
evaluateProject' (TaskConfig config logger statter) proxy parser lang paths evaluateProject' (TaskConfig config logger statter) proxy parser lang paths

View File

@ -9,7 +9,6 @@ import Algebra.Graph.Export hiding ((<+>))
import Algebra.Graph.Export.Dot hiding (export) import Algebra.Graph.Export.Dot hiding (export)
import Data.List import Data.List
import Data.String import Data.String
import Prologue
-- | Serialize a graph to DOT format. -- | Serialize a graph to DOT format.
-- --

View File

@ -12,8 +12,8 @@ import Data.Term
import Data.These import Data.These
import Diffing.Algorithm import Diffing.Algorithm
import Diffing.Algorithm.RWS import Diffing.Algorithm.RWS
import Test.Hspec
import Test.Hspec.LeanCheck import Test.Hspec.LeanCheck
import SpecHelpers
spec :: Spec spec :: Spec
spec = parallel $ do spec = parallel $ do

View File

@ -14,6 +14,7 @@ import Test.Hspec (Spec, describe, it, parallel)
import Test.Hspec.Expectations.Pretty import Test.Hspec.Expectations.Pretty
import Test.Hspec.LeanCheck import Test.Hspec.LeanCheck
import Test.LeanCheck.Core import Test.LeanCheck.Core
import SpecHelpers
spec :: Spec spec :: Spec
spec = parallel $ do spec = parallel $ do

View File

@ -0,0 +1,47 @@
{-# LANGUAGE PackageImports #-}
module Graphing.Calls.Spec ( spec ) where
import Prelude hiding (readFile)
import Prologue
import SpecHelpers hiding (readFile)
import Algebra.Graph
import Data.List (uncons)
import "semantic" Data.Graph (Graph (..), topologicalSort)
import Data.Graph.Vertex
import qualified Data.Language as Language
import Semantic.Config (defaultOptions)
import Semantic.Graph
import Semantic.IO
callGraphPythonProject paths = runTaskWithOptions defaultOptions $ do
let proxy = Proxy @'Language.Python
let lang = Language.Python
blobs <- catMaybes <$> traverse readFile (flip File lang <$> paths)
package <- parsePackage pythonParser (Project (takeDirectory (maybe "/" fst (uncons paths))) blobs lang [])
modules <- topologicalSort <$> runImportGraph proxy package
runCallGraph proxy False modules package
spec :: Spec
spec = describe "call graphing" $ do
let needs r n = unGraph r `shouldSatisfy` hasVertex (Variable n)
it "should work for a simple example" $ do
res <- callGraphPythonProject ["test/fixtures/python/graphing/simple/simple.py"]
res `needs` "magnus"
it "should evaluate both sides of an if-statement" $ do
res <- callGraphPythonProject ["test/fixtures/python/graphing/conditional/conditional.py"]
res `needs` "merle"
res `needs` "taako"
it "should continue even when a type error is encountered" $ do
res <- callGraphPythonProject ["test/fixtures/python/graphing/typeerror/typeerror.py"]
res `needs` "lup"
it "should continue when an unbound variable is encountered" $ do
res <- callGraphPythonProject ["test/fixtures/python/graphing/unbound/unbound.py"]
res `needs` "lucretia"

View File

@ -83,11 +83,11 @@ spec = parallel $ do
TS.ts_parser_loop_until_cancelled p nullPtr nullPtr 0 TS.ts_parser_loop_until_cancelled p nullPtr nullPtr 0
pure True pure True
res <- timeout 1500 (wait churn) res <- timeout 2500 (wait churn)
res `shouldBe` Nothing res `shouldBe` Nothing
TS.ts_parser_set_enabled p (CBool 0) TS.ts_parser_set_enabled p (CBool 0)
done <- timeout 1500 (wait churn) done <- timeout 2500 (wait churn)
done `shouldBe` (Just True) done `shouldBe` (Just True)

View File

@ -16,6 +16,7 @@ import qualified Data.Term.Spec
import qualified Diffing.Algorithm.RWS.Spec import qualified Diffing.Algorithm.RWS.Spec
import qualified Diffing.Algorithm.SES.Spec import qualified Diffing.Algorithm.SES.Spec
import qualified Diffing.Interpreter.Spec import qualified Diffing.Interpreter.Spec
import qualified Graphing.Calls.Spec
import qualified Integration.Spec import qualified Integration.Spec
import qualified Matching.Go.Spec import qualified Matching.Go.Spec
import qualified Numeric.Spec import qualified Numeric.Spec
@ -52,6 +53,7 @@ main = do
describe "Diffing.Algorithm.RWS" Diffing.Algorithm.RWS.Spec.spec describe "Diffing.Algorithm.RWS" Diffing.Algorithm.RWS.Spec.spec
describe "Diffing.Algorithm.SES" Diffing.Algorithm.SES.Spec.spec describe "Diffing.Algorithm.SES" Diffing.Algorithm.SES.Spec.spec
describe "Diffing.Interpreter" Diffing.Interpreter.Spec.spec describe "Diffing.Interpreter" Diffing.Interpreter.Spec.spec
describe "Graphing.Calls" Graphing.Calls.Spec.spec
describe "Matching" Matching.Go.Spec.spec describe "Matching" Matching.Go.Spec.spec
describe "Numeric" Numeric.Spec.spec describe "Numeric" Numeric.Spec.spec
describe "Rendering.TOC" Rendering.TOC.Spec.spec describe "Rendering.TOC" Rendering.TOC.Spec.spec

View File

@ -1,3 +1,5 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
module SpecHelpers module SpecHelpers
( module X ( module X
, runBuilder , runBuilder
@ -44,6 +46,7 @@ import Data.Record as X
import Data.Semilattice.Lower as X import Data.Semilattice.Lower as X
import Data.Source as X import Data.Source as X
import Data.Span as X import Data.Span as X
import Data.String
import Data.Sum import Data.Sum
import Data.Term as X import Data.Term as X
import Parsing.Parser as X import Parsing.Parser as X
@ -75,6 +78,11 @@ import Control.Exception (displayException)
runBuilder = toStrict . toLazyByteString runBuilder = toStrict . toLazyByteString
-- | This orphan instance is so we don't have to insert @name@ calls
-- in dozens and dozens of environment specs.
instance IsString Name where
fromString = name . fromString
-- | Returns an s-expression formatted diff for the specified FilePath pair. -- | Returns an s-expression formatted diff for the specified FilePath pair.
diffFilePaths :: TaskConfig -> Both FilePath -> IO ByteString diffFilePaths :: TaskConfig -> Both FilePath -> IO ByteString
diffFilePaths (TaskConfig config logger statter) paths = readFilePair paths >>= runTaskWithConfig config logger statter . runDiff SExpressionDiffRenderer . pure >>= either (die . displayException) (pure . runBuilder) diffFilePaths (TaskConfig config logger statter) paths = readFilePair paths >>= runTaskWithConfig config logger statter . runDiff SExpressionDiffRenderer . pure >>= either (die . displayException) (pure . runBuilder)

View File

@ -47,8 +47,8 @@ instance Example Property where
Left e Left e
| Just (LeanCheckException messages e') <- fromException e -> throw (addMessages messages e') | Just (LeanCheckException messages e') <- fromException e -> throw (addMessages messages e')
| otherwise -> throw e | otherwise -> throw e
Right (Just messages) -> pure $ Failure Nothing (Reason (concat messages)) Right (Just messages) -> pure $ Result "" (Failure Nothing (Reason (concat messages)))
Right Nothing -> pure Success Right Nothing -> pure $ Result "" Success
where addMessages messages (HUnit.HUnitFailure loc r) = HUnit.HUnitFailure loc $ case r of where addMessages messages (HUnit.HUnitFailure loc r) = HUnit.HUnitFailure loc $ case r of
HUnit.Reason s -> HUnit.Reason (intercalate "\n" messages ++ "\n" ++ s) HUnit.Reason s -> HUnit.Reason (intercalate "\n" messages ++ "\n" ++ s)
HUnit.ExpectedButGot Nothing expected actual -> HUnit.ExpectedButGot (Just (concat messages)) expected actual HUnit.ExpectedButGot Nothing expected actual -> HUnit.ExpectedButGot (Just (concat messages)) expected actual

View File

@ -0,0 +1,6 @@
export function square(x) {
return x * x;
}
export function area(x, y) {
return x * y;
}

View File

@ -0,0 +1,3 @@
import { square, area } from 'lib';
console.log(square(11)); // 121
console.log(area(4, 3)); // 12

View File

@ -0,0 +1,8 @@
cond = True
if cond:
def merle(): pass
merle()
else:
def taako(): pass
taako()

View File

@ -0,0 +1,4 @@
def magnus():
return "string"
magnus()

View File

@ -0,0 +1,5 @@
var = 1 + "thing"
def lup(): pass
lup()

Some files were not shown because too many files have changed in this diff Show More