profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/RyanGlScott/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.

ekmett/ad 318

Automatic Differentiation

ekmett/free 138

free monads

ekmett/discrimination 124

Fast linear time sorting and discrimination for a large class of data types

ekmett/bound 105

Combinators for manipulating locally-nameless generalized de Bruijn terms

ekmett/gl 86

Complete raw OpenGL bindings for Haskell

ekmett/comonad 72

Haskell 98 comonads

ekmett/contravariant 70

Haskell 98 contravariant functors

ekmett/constraints 62

Tools for programming with ConstraintKinds in GHC

ekmett/ersatz 57

A monad for interfacing with external SAT solvers

ekmett/either 51

the EitherT monad transformer

PR opened goldfirere/singletons

Support type-level `Char`s

GHC 9.2 now supports type-level characters, which means that singletons-th is now able to promote and single character literals in certain circumstances. It also means that we can remove two terrible hacks in Text.Show.Singletons:

  • We no longer need SChar, which fakes type-level characters with Symbols of length one.
  • The PShow and SShow instances for Symbol can now display escape characters properly rather than returning the input Symbol unchanged.

Fixes #487.

+506 -58

0 comment

14 changed files

pr created time in 2 hours

push eventgoldfirere/singletons

Ryan Scott

commit sha 734e1b9c84be7d9448f60f8c17f56eeed8c7353d

Support type-level Chars GHC 9.2 now supports type-level characters, which means that `singletons-th` is now able to promote and single character literals in certain circumstances. It also means that we can remove two terrible hacks in `Text.Show.Singletons`: * We no longer need `SChar`, which fakes type-level characters with `Symbol`s of length one. * The `PShow` and `SShow` instances for `Symbol` can now display escape characters properly rather than returning the input `Symbol` unchanged. Fixes #487.

view details

push time in 2 hours

push eventgoldfirere/singletons

Ryan Scott

commit sha 3f9828ecb9acebe74412da74f110956003845921

Add more documentation for overlapping and literal patterns While working on #487, I realized that the current `README` documentation about literal patterns is non-existent, so I decided to add some. In order to explain the limitations of literal patterns, however, one must explain the limitations of overlapping patterns, and I discovered that the `README` also doesn't do a very good job of explaining this either. At this point, I decided to spin off this documentation improvement into its own commit. [ci skip]

view details

Ryan Scott

commit sha eb1b55cc7971a85224c53fbffb658451fefee612

WIP: Type-level Chars

view details

push time in 2 hours

push eventgoldfirere/singletons

Ryan Scott

commit sha 3f9828ecb9acebe74412da74f110956003845921

Add more documentation for overlapping and literal patterns While working on #487, I realized that the current `README` documentation about literal patterns is non-existent, so I decided to add some. In order to explain the limitations of literal patterns, however, one must explain the limitations of overlapping patterns, and I discovered that the `README` also doesn't do a very good job of explaining this either. At this point, I decided to spin off this documentation improvement into its own commit. [ci skip]

view details

push time in 2 hours

PR opened goldfirere/singletons

Add more documentation for overlapping and literal patterns

While working on #487, I realized that the current README documentation about literal patterns is non-existent, so I decided to add some. In order to explain the limitations of literal patterns, however, one must explain the limitations of overlapping patterns, and I discovered that the README also doesn't do a very good job of explaining this either. At this point, I decided to spin off this documentation improvement into its own commit.

+89 -2

0 comment

1 changed file

pr created time in 2 hours

push eventgoldfirere/singletons

Ryan Scott

commit sha 84a34b15ffd3ed4bef4a62cf665b944f405f10dd

Add more documentation for overlapping and literal patterns While working on #487, I realized that the current `README` documentation about literal patterns is non-existent, so I decided to add some. In order to explain the limitations of literal patterns, however, one must explain the limitations of overlapping patterns, and I discovered that the `README` also doesn't do a very good job of explaining this either. At this point, I decided to spin off this documentation improvement into its own commit. [ci skip]

view details

push time in 2 hours

create barnchgoldfirere/singletons

branch : docs-overlapping-patterns

created branch time in 2 hours

PR opened goldfirere/singletons

`singletons-th`: Support type applications in data constructor patterns

While supporting visible type applications in their full generality is challenging, type applications in data constructor patterns are a very well behaved subset, which makes it quite feasible to support in singletons-th. This patch accomplishes just that.

We also make an effort to distinguish between wildcard types found in type applications in data constructor, which we can support, and other wildcard types, which we cannot yet support due to GHC restrictions about using wildcard types in kind-level contexts. I have added a section to the README to explain this distinction.

Fixes #489.

While I was in town, I also improved the error message that singletons-th produces when it tries to promote a wildcard type that it cannot currently support, thus fixing #480.

+322 -136

0 comment

11 changed files

pr created time in 2 hours

create barnchgoldfirere/singletons

branch : T489

created branch time in 2 hours

push eventekmett/pointed

Ryan Scott

commit sha f8f0d94d5738a0949441ad05688fb6b9ad7c587a

CI: Disable Freenode-based IRC notifications

view details

push time in 8 hours

create barnchGaloisInc/ASKE-E

branch : sbml-round-trip-testing

created branch time in a day

pull request commentGaloisInc/crucible

uc-crux-llvm: Minor test suite fixes

Be warned that imposing time >= 1.9.1 will cut off support for GHC 8.6, as 8.6 is bundled with time-1.8.0.2. This is a problem I ran into separately in #815, which also uses an API that was introduced in time-1.9—see this code that I added to support older versions of time.

I wonder if it would be worth factoring out this code in a separate .Compat module and backport an implementation of secondsToNominalDiffTime as well. Luckily, the definition of secondsToNominalDiffTime is pretty simple, so this should be a smaller lift.

langston-barrett

comment created time in a day

push eventGaloisInc/ASKE-E

Ryan Scott

commit sha 7e77d9dbaa74d6c24e718a377b440ced6f3d4818

tests: Declare SBML module in .cabal file

view details

push time in a day

push eventGaloisInc/ASKE-E

Ryan Scott

commit sha 7db0da6125a3a2a6e8fe7680019d79ceb6bb87ed

sbmlToXML: Support UnitDef and Unit

view details

push time in a day

issue openedsosy-lab/sv-witnesses

Clarify in the documentation if `programhash` is allowed to be SHA-1

Currently, the README states that the programhash must be a SHA-256 hash:

Valid values: SHA-256 hash programhash is used to record the SHA-256 hash value of the verified program, for example, e2d5365a863c1c57fbe2870942676040efc3aea2d9bb085092800d6e256daf06.

In practice, however, the witness linter will accept both SHA-1 and SHA-256 hashes:

https://github.com/sosy-lab/sv-witnesses/blob/20414d976d9e46da6a93be38c34237f71a01033f/lint/witnesslint/linter.py#L531-L539

Is it permissible for the programhash to be a SHA-1 one? I ask since witness validators like fshell-witness2test will produce a warning if the programhash does not match the SHA-1 (and only the SHA-1) hash of the file (see these lines). If SHA-1 hashes are permitted, the documentation should be clarified.

created time in a day

issue openedsosy-lab/sv-witnesses

Example witness files in the repo do not pass linter

The witness linter will reject the example witness files from the repo:

$ ./lint/witnesslinter.py minepump_spec1_product33_false-unreach-call_false-termination.cil.c --witness minepump_spec1_product33_false-unreach-call_false-termination.cil.graphml 
WARNING : Creationtime has not been specified

witnesslint finished with exit code 1

$ ./lint/witnesslinter.py minepump_spec1_product33_false-unreach-call_false-termination.cil.c --witness minepump_spec1_product33_false-unreach-call_false-termination.cil.ultimateautomizer.graphml 
WARNING : line 4: Unexpected default namespace: http://graphml.graphdrawing.org/xmlns/graphml
WARNING : Key 'architecture' has been used but not defined
WARNING : Key 'specification' has been used but not defined
WARNING : Key 'programfile' has been used but not defined
WARNING : Key 'programhash' has been used but not defined
WARNING : Key 'producer' has been used but not defined
WARNING : Creationtime has not been specified

witnesslint finished with exit code 1

$ ./lint/witnesslinter.py minepump_spec1_product33_false-unreach-call_false-termination.cil.c --witness multivar_true-unreach-call1.graphml 
WARNING : line 54: Programhash does not match the hash specified in the witness
WARNING : Creationtime has not been specified

witnesslint finished with exit code 1

created time in a day

Pull request review commentsosy-lab/benchexec

Add tool module for Crux

+# This file is part of BenchExec, a framework for reliable benchmarking:+# https://github.com/sosy-lab/benchexec+#+# SPDX-FileCopyrightText: 2007-2020 Dirk Beyer <https://www.sosy-lab.org>+#+# SPDX-License-Identifier: Apache-2.0++import benchexec.tools.template+import benchexec.result as result+import re+from benchexec.tools.sv_benchmarks_util import get_data_model_from_task, ILP32, LP64+++class Tool(benchexec.tools.template.BaseTool2):+    """+    Tool info for Crux (https://crux.galois.com/).+    """++    def executable(self, tool_locator):+        return tool_locator.find_executable("crux-llvm-svcomp-driver.sh")++    def name(self):+        return "Crux"++    def cmdline(self, executable, options, task, rlimits):+        if task.property_file:+            options += ["--svcomp-spec", task.property_file]+        data_model_param = get_data_model_from_task(+            task, {ILP32: "32bit", LP64: "64bit"}+        )+        if data_model_param:+            options += ["--svcomp-arch", data_model_param]+        return [executable] + options + list(task.input_files_or_identifier)++    def version(self, executable):+        s = self._version_from_tool(executable)+        return s[s.find("version:"):]++    def determine_result(self, run):+        override_pat = re.compile("No implementation or override found for pointer: \"(.+?)\"")++        for line in run.output:+            # There are still a good number of functions for which Crux lacks+            # overrides (see, for example, issue #187). Rather than reporting+            # FALSIFIED for such programs (which will dock us points), we will+            # instead conservatively return UNKNOWN, which doesn't lose (or+            # gain) points. To make it more obvious which programs are UNKNOWN+            # due to failing overrides versus incomplete goals, we include the+            # name of the failing override in parentheses after UNKNOWN, which+            # will show up in benchexec's reports.+            m = override_pat.search(line)+            if m:+                return result.RESULT_UNKNOWN + "(no override: " + m.group(1) + ")"+            # Crucible does not currently support inline assembly+            elif "unsupported LLVM value: ValAsm" in line:+                return result.RESULT_UNKNOWN + "(inline assembly)"+            # Crucible does not currently support translating `long double`s+            # (https://github.com/GaloisInc/crucible/issues/810)+            elif "unsupported LLVM value: ValFP80" in line:+                return result.RESULT_UNKNOWN + "(long double)"+            elif "Verification result: VERIFIED" in line:+                return result.RESULT_TRUE_PROP+            elif "Verification result: FALSIFIED (valid-free)" in line:+                return result.RESULT_FALSE_FREE+            elif "Verification result: FALSIFIED (valid-deref)" in line:+                return result.RESULT_FALSE_DEREF+            elif "Verification result: FALSIFIED (valid-memtrack)" in line:+                return result.RESULT_FALSE_MEMTRACK+            elif "Verification result: FALSIFIED (valid-memcleanup)" in line:+                return result.RESULT_FALSE_MEMCLEANUP+            elif "Verification result: FALSIFIED (no-overflow)" in line:+                return result.RESULT_FALSE_OVERFLOW+            elif "Verification result: FALSIFIED (termination)" in line:+                return result.RESULT_FALSE_TERMINATION+            elif "Verification result: FALSIFIED (unreach-call)" in line:+                return result.RESULT_FALSE_REACH+            elif "Verification result: FALSIFIED" in line:+                return result.RESULT_FALSE_PROP+            elif "Verification result: UNKNOWN" in line:+                return result.RESULT_UNKNOWN + "(incomplete)"+            elif "Verification result: ERROR" in line:+                return result.RESULT_ERROR+        return result.RESULT_UNKNOWN++    def program_files(self, executable):+        return [executable] + self.REQUIRED_PATHS

I'm OK with everything every file (both at the top level and under bin) being included, so I've added REQUIRED_PATHS = ["."].

RyanGlScott

comment created time in a day

PullRequestReviewEvent

push eventRyanGlScott/benchexec

Ryan Scott

commit sha 59467ea76f7c09f9bebf2291d50ad27221ce7371

Add tool module for Crux This adds a tool module for [Crux](https://crux.galois.com/).

view details

push time in a day

push eventekmett/semigroupoids

Michael Peyton Jones

commit sha 12367e49dfa3796c60211cc03235e468cc1ce2cc

Add helpers for defining Traversable1 instances (#111) I was struggling to define such instances (in fact, I was trying to write a `Traversal1` from `lens`, but it's the same problem), until I found this [helpful issue](https://github.com/ekmett/semigroupoids/issues/66) that shows how to combine `Traversable` and `Traversable1` sub-structures using `MaybeApply`. I think this is very helpful for users, so I've added the functions from the issue, another missing function, which I've called `traverse1Maybe`, and a simple example so users can see how to put them together. Fixes #66.

view details

push time in a day

PR merged ekmett/semigroupoids

Add helpers for defining Traversable1 instances

I was struggling to define such instances (in fact, I was trying to write a Traversal1 from lens, but it's the same problem), until I found this helpful issue that shows how to combine Traversable and Traversable1 sub-structures using MaybeApply.

I think this is very helpful for users, so I've added the functions from the issue, another missing function, which I've called traverse1Maybe, and a simple example so users can see how to put them together.

Fixes #66.

+43 -0

4 comments

3 changed files

michaelpj

pr closed time in a day

issue closedekmett/semigroupoids

Combining MaybeApply f and f

I've found these combinators to be very handy:

(<.*>) :: (Apply f) => f (a -> b) -> MaybeApply f a -> f b
ff <.*> MaybeApply (Left fa) = ff <.> fa
ff <.*> MaybeApply (Right a) = ($ a) <$> ff
infixl 4 <.*>

(<*.>) :: (Apply f) => MaybeApply f (a -> b) -> f a -> f b
MaybeApply (Left ff) <*.> fa = ff <.> fa
MaybeApply (Right f) <*.> fa = f <$> fa
infixl 4 <*.>

They're useful for defining Traversable1/Bitraversable1 for types that have fields that can be empty, e.g.:

data Foo a = Foo (Maybe a) (Maybe a) (Maybe a) a [a]

instance Traversable1 Foo where
  traverse1 f (Foo ma mb mc a as) = Foo <$> traverse f ma <*> traverse f mb <*> traverse f mc <*.> f a <.*> traverse f as

Should they be added to Data.Functor.Apply?

closed time in a day

quasicomputational
PullRequestReviewEvent

push eventGaloisInc/ASKE-E

Ryan Scott

commit sha 3e4a70b3856b7bd32fed31de09348071b97b3acf

First shot at Language.ASKEE.SBML.ToXML

view details

push time in 2 days

Pull request review commentGaloisInc/saw-script

Use prebuilt what4-solvers binaries

 build() {   fi } -build_abc() {-  arch=X86_64-  case "$RUNNER_OS" in-    Linux) os="Linux" ;;-    macOS) os="OSX" ;;-    Windows) os="Windows" ;;-  esac-  (cd deps/abcBridge &&-    scripts/build-abc.sh $arch $os &&-    cp abc-build/abc $BIN/abc)-  output path $BIN/abc-}- install_system_deps() {-  install_z3 &-  install_cvc4 &-  install_yices &-  wait+  (cd $BIN && curl -o bins.zip -sL "https://github.com/GaloisInc/what4-solvers/releases/download/$SOLVER_PKG_VERSION/$BIN_ZIP_FILE" && unzip -o bins.zip && rm bins.zip)+  chmod +x $BIN/*+  cp $BIN/yices_smt2$EXT $BIN/yices-smt2$EXT

Oh, I see now—this is changing from yices_smt2 (with an underscore) to yices-smt2 (with a hyphen). Is this something that should be done on what4-solvers' end, I wonder?

atomb

comment created time in 2 days

PullRequestReviewEvent

Pull request review commentGaloisInc/saw-script

Use prebuilt what4-solvers binaries

 jobs:           name: "saw-Linux-${{ matrix.ghc }}"           path: ./s2nTests/bin -      - uses: actions/download-artifact@v2-        with:-          path: ./s2nTests/bin-          name: abc-${{ runner.os }}-       - shell: bash         working-directory: s2nTests         run: |+          curl -o solvers-bin.zip -sL "https://github.com/GaloisInc/what4-solvers/releases/download/$SOLVER_PKG_VERSION/ubuntu-18.04-bin.zip"

Does ci.sh's install_system_deps() function do this for you?

atomb

comment created time in 2 days

PullRequestReviewEvent

Pull request review commentGaloisInc/saw-script

Use prebuilt what4-solvers binaries

 jobs:        - uses: actions/checkout@v2       - run: |-          git submodule update --init-          git -C deps/abcBridge submodule update --init

Now that we no longer invoke git -C deps/abcBridge submodule update --init, can we remove the abcBridge submodule?

atomb

comment created time in 2 days

Pull request review commentGaloisInc/saw-script

Use prebuilt what4-solvers binaries

 env:   # ./saw/Dockerfile   # ./saw-remote-api/Dockerfile   # ./s2nTests/docker/saw.dockerfile-  Z3_VERSION: "4.8.10"-  CVC4_VERSION: "4.1.8"-  YICES_VERSION: "2.6.2"+  SOLVER_PKG_VERSION: "snapshot-20210917"

Are the comments above this line (about the solver versions needing to be specified in other locations) still relevant?

atomb

comment created time in 2 days