From 4d3f576a6703746dea2012dc80335db7973bf134 Mon Sep 17 00:00:00 2001 From: Brandon Dyck Date: Mon, 9 Sep 2024 15:18:27 -0600 Subject: [PATCH] Added curry for nerdy point-freedom --- parser_test.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/parser_test.go b/parser_test.go index 986279e..4232059 100644 --- a/parser_test.go +++ b/parser_test.go @@ -14,7 +14,15 @@ func Todo(t *testing.T) { t.Errorf("TODO") } -func notP[T any](pred func(T) bool) func(T) bool { +func curry[A, B, C any](f func(A, B) C) func(A) func(B) C { + return func(a A) func(B) C { + return func(b B) C { + return f(a, b) + } + } +} + +func not[T any](pred func(T) bool) func(T) bool { return func(x T) bool { return !pred(x) } } @@ -39,7 +47,7 @@ func TestSlice(t *testing.T) { t.Run("fails with wrong contents", rapid.MakeCheck(func(t *rapid.T) { s := rapid.SliceOfN(rapid.Byte(), 1, -1).Draw(t, "s") input := rapid.SliceOfN(rapid.Byte(), len(s), -1). - Filter(notP(hasPrefix(s))).Draw(t, "input") + Filter(not(curry(bytes.HasPrefix)(s))).Draw(t, "input") assertParseFails(t, input, gigaparsec.Slice(s)) })) t.Run("fails at end of input", rapid.MakeCheck(func(t *rapid.T) {