Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
collatz, palindrome, maybe, fizzbuzz, anagram, roman, binary, either, primes, zipwith, matrix, wordcount, powers — all 18/18 programs green. conformance.sh PROGRAMS array updated; scoreboard.md regenerated. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
84 lines
2.2 KiB
Plaintext
84 lines
2.2 KiB
Plaintext
;; maybe.hs — safe operations returning Maybe values.
|
|
|
|
(define
|
|
hk-prog-val
|
|
(fn
|
|
(src name)
|
|
(hk-deep-force (get (hk-eval-program (hk-core src)) name))))
|
|
|
|
(define
|
|
hk-as-list
|
|
(fn
|
|
(xs)
|
|
(cond
|
|
((and (list? xs) (= (first xs) "[]")) (list))
|
|
((and (list? xs) (= (first xs) ":"))
|
|
(cons (nth xs 1) (hk-as-list (nth xs 2))))
|
|
(:else xs))))
|
|
|
|
(define
|
|
hk-maybe-src
|
|
"safeDiv _ 0 = Nothing\nsafeDiv x y = Just (x `div` y)\n\nsafeHead [] = Nothing\nsafeHead (x:_) = Just x\n\nfromMaybeZero Nothing = 0\nfromMaybeZero (Just x) = x\n\nmapMaybe _ Nothing = Nothing\nmapMaybe f (Just x) = Just (f x)\n\ndouble x = x * 2\n")
|
|
|
|
(hk-test
|
|
"safeDiv 10 2 = Just 5"
|
|
(hk-prog-val (str hk-maybe-src "r = safeDiv 10 2\n") "r")
|
|
(list "Just" 5))
|
|
|
|
(hk-test
|
|
"safeDiv 7 0 = Nothing"
|
|
(hk-prog-val (str hk-maybe-src "r = safeDiv 7 0\n") "r")
|
|
(list "Nothing"))
|
|
|
|
(hk-test
|
|
"safeHead [1,2,3] = Just 1"
|
|
(hk-prog-val (str hk-maybe-src "r = safeHead [1,2,3]\n") "r")
|
|
(list "Just" 1))
|
|
|
|
(hk-test
|
|
"safeHead [] = Nothing"
|
|
(hk-prog-val (str hk-maybe-src "r = safeHead []\n") "r")
|
|
(list "Nothing"))
|
|
|
|
(hk-test
|
|
"fromMaybeZero Nothing = 0"
|
|
(hk-prog-val (str hk-maybe-src "r = fromMaybeZero Nothing\n") "r")
|
|
0)
|
|
|
|
(hk-test
|
|
"fromMaybeZero (Just 42) = 42"
|
|
(hk-prog-val (str hk-maybe-src "r = fromMaybeZero (Just 42)\n") "r")
|
|
42)
|
|
|
|
(hk-test
|
|
"mapMaybe double Nothing = Nothing"
|
|
(hk-prog-val (str hk-maybe-src "r = mapMaybe double Nothing\n") "r")
|
|
(list "Nothing"))
|
|
|
|
(hk-test
|
|
"mapMaybe double (Just 5) = Just 10"
|
|
(hk-prog-val (str hk-maybe-src "r = mapMaybe double (Just 5)\n") "r")
|
|
(list "Just" 10))
|
|
|
|
(hk-test
|
|
"chain: fromMaybeZero (safeDiv 10 2) = 5"
|
|
(hk-prog-val (str hk-maybe-src "r = fromMaybeZero (safeDiv 10 2)\n") "r")
|
|
5)
|
|
|
|
(hk-test
|
|
"chain: fromMaybeZero (safeDiv 10 0) = 0"
|
|
(hk-prog-val (str hk-maybe-src "r = fromMaybeZero (safeDiv 10 0)\n") "r")
|
|
0)
|
|
|
|
(hk-test
|
|
"safeDiv 100 5 = Just 20"
|
|
(hk-prog-val (str hk-maybe-src "r = safeDiv 100 5\n") "r")
|
|
(list "Just" 20))
|
|
|
|
(hk-test
|
|
"mapMaybe double (safeDiv 6 2) = Just 6"
|
|
(hk-prog-val (str hk-maybe-src "r = mapMaybe double (safeDiv 6 2)\n") "r")
|
|
(list "Just" 6))
|
|
|
|
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}
|