FuseFlatmapsWithInnerVisit.yqls 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. (
  2. #comment
  3. (let config (DataSource 'config))
  4. (let res_sink (DataSink 'result))
  5. (let vt (VariantType (TupleType (DataType 'String) (DataType 'String) (DataType 'String))))
  6. (let v0 (Variant (String 'aaa) '0 vt))
  7. (let v1 (Variant (String 'bbb) '1 vt))
  8. (let v2 (Variant (String 'ccc) '2 vt))
  9. (let list (AsList v0 v1 v2))
  10. (let inner (lambda '(list)
  11. (FlatMap list (lambda '(item)
  12. (Visit item
  13. '0 (lambda '(x) (OptionalIf (== x (String 'aaa)) (Variant (Concat (String '0-) x) '0 vt)))
  14. '1 (lambda '(x) (Just (Variant (Concat (String '1-) x) '1 vt)))
  15. (Just (Variant (String '2-) '2 vt))
  16. )
  17. ))
  18. ))
  19. (let res (FlatMap (Apply inner (Iterator list (DependsOn (String 'a)))) (lambda '(item)
  20. (Just (VariantItem item))
  21. )))
  22. (let world (Write! world res_sink (Key) (Collect res) '('('type))))
  23. (let res (FlatMap (Apply inner (Iterator list (DependsOn (String 'b)))) (lambda '(item)
  24. (Just (Visit item
  25. '0 (lambda '(x) (Variant x '0 vt))
  26. '1 (lambda '(x) (Variant x '1 vt))
  27. '2 (lambda '(x) (Variant x '1 vt))
  28. ))
  29. )))
  30. (let world (Write! world res_sink (Key) (Collect res) '('('type))))
  31. (let res (FlatMap
  32. (FlatMap list (lambda '(item)
  33. (Visit item
  34. '0 (lambda '(x) (ListIf (== x (String 'aaa)) (Variant (Concat (String '0-) x) '0 vt)))
  35. '1 (lambda '(x) (AsList (Variant (Concat (String '1-) x) '1 vt) (Variant (Concat (String '2-) x) '2 vt)))
  36. (AsList (Variant (String '2-) '2 vt))
  37. )
  38. ))
  39. (lambda '(item)
  40. (Just (Visit item
  41. '0 (lambda '(x) (Variant x '0 vt))
  42. '1 (lambda '(x) (Variant x '1 vt))
  43. '2 (lambda '(x) (Variant x '1 vt))
  44. ))
  45. )
  46. ))
  47. (let world (Write! world res_sink (Key) (Collect res) '('('type))))
  48. (let world (Commit! world res_sink))
  49. (return world)
  50. )