tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

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