consumer_base_library.tri (3616B)
1 -- Generic SCP-authored list functions; same source grammar for every export. 2 !import "consumers.base-source" B 3 !import "consumers.structural" S 4 !import "io" !Local 5 !import "prelude" !Local 6 load name = onResult_ (readFile (append "lib/consumer/" (append name ".scp"))) (problem : pure (err problem t)) (text : matchResult 7 (_ _ : pure (err "consumer source did not parse" t)) 8 (program _ : pure (ok (snd program) t)) 9 (B.compileBaseSource text)) 10 checkPrograms mapper wrapper appender folder prepender reverser filtering nonempty prefixer unwrapper pathNamer = 11 let values = [1 2 3] in 12 let configuredMap = S.makeConsumer wrapper (snd mapper) in 13 let configuredAppend = S.makeConsumer [4 5] (snd appender) in 14 let configuredFold = S.makeConsumer (pair prepender t) (snd folder) in 15 let configuredReverse = S.makeConsumer (pair folder prepender) (snd reverser) in 16 let mappedReverse = S.makeConsumer configuredReverse (snd mapper) in 17 let configuredFilter = S.makeConsumer nonempty (snd filtering) in 18 let configuredPrefix = S.makeConsumer "/_arboricx/" (snd prefixer) in 19 let configuredPath = S.makeConsumer (pair configuredPrefix unwrapper) (snd pathNamer) in 20 let transformedPath = S.makeConsumer (pair configuredPrefix (S.replaceLiteral unwrapper "missing" "absent")) (snd pathNamer) in 21 foldl and? true [(equal? (resultOr (t t) (S.runConsumer configuredMap values)) [[1] [2] [3]]) 22 (equal? (resultOr (t t) (S.runConsumer configuredAppend values)) [1 2 3 4 5]) 23 (equal? (resultOr (t t) (S.runConsumer configuredFold values)) [3 2 1]) 24 (equal? (resultOr (t t) (S.runConsumer configuredReverse values)) [3 2 1]) 25 (equal? (resultOr (t t) (S.runConsumer mappedReverse [[1 2] [3 4 5]])) [[2 1] [5 4 3]]) 26 (equal? (resultOr (t t) (S.runConsumer configuredFilter [[] [1] [2 3] []])) [[1] [2 3]]) 27 (equal? (resultOr (t t) (S.runConsumer configuredPrefix "/_arboricx/health")) (just "health")) 28 (equal? (resultOr (t t) (S.runConsumer configuredPrefix "/_arboricx/")) (just t)) 29 (equal? (resultOr (t t) (S.runConsumer configuredPrefix "/_arboric/health")) nothing) 30 (equal? (resultOr (t t) (S.runConsumer configuredPath "/_arboricx/health")) "health") 31 (equal? (resultOr (t t) (S.runConsumer configuredPath "/other")) "missing") 32 (equal? (resultOr (t t) (S.runConsumer transformedPath "/other")) "absent") 33 (equal? (resultOr (t t) (S.runConsumer transformedPath "/_arboricx/health")) "health")] 34 main = io (onResult_ (load "map") (_ : putStrLn "map-load-fail") (mapper : 35 onResult_ (load "wrap") (_ : putStrLn "wrap-load-fail") (wrapper : 36 onResult_ (load "append") (_ : putStrLn "append-load-fail") (appender : 37 onResult_ (load "fold") (_ : putStrLn "fold-load-fail") (folder : 38 onResult_ (load "prepend") (_ : putStrLn "prepend-load-fail") (prepender : 39 onResult_ (load "reverse") (_ : putStrLn "reverse-load-fail") (reverser : 40 onResult_ (load "filter") (_ : putStrLn "filter-load-fail") (filtering : 41 onResult_ (load "nonempty") (_ : putStrLn "nonempty-load-fail") (nonempty : 42 onResult_ (load "stripPrefix") (_ : putStrLn "prefix-load-fail") (prefixer : 43 onResult_ (load "unwrap") (_ : putStrLn "unwrap-load-fail") (unwrapper : 44 onResult_ (load "pathName") (_ : putStrLn "pathname-load-fail") (pathNamer : 45 putStrLn (matchBool "scp-base-library-ok" "scp-base-library-DIFFER" 46 (checkPrograms mapper wrapper appender folder prepender reverser filtering nonempty prefixer unwrapper pathNamer)))))))))))))) 47 main