Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Alessandro Maclaine
Alessandro Maclaine

Posted on

     

Zipping Options in Effect-TS: A Practical Guide

Zipping Options in Effect-TS: A Practical Guide

In functional programming, combining multiple optional values (represented asOptions) in a safe and predictable way is a common task. Effect-TS provides several methods to "zip"Options together, allowing you to combine their values or select one based on specific rules. In this article, we'll explore three key functions for zippingOptions:O.zipRight,O.zipLeft, andO.zipWith.

Example 1: Returning the Second Option withO.zipRight

Concept

TheO.zipRight function allows you to combine twoOptions, discarding the first and returning the second. This operation succeeds if bothOptions areSome; otherwise, it returnsNone.

Code

functionzipping_ex01(){constsome1=O.some(1);// Create an Option containing the value 1constsome2=O.some(2);// Create an Option containing the value 2constnone=O.none();// Create an Option representing no valueconsole.log(pipe(some1,O.zipRight(some2)));// Output: Some(2) (returns the second Option)console.log(pipe(some1,O.zipRight(none)));// Output: None (since the second Option is None)console.log(pipe(none,O.zipRight(some2)));// Output: None (since the first Option is None)}
Enter fullscreen modeExit fullscreen mode

Explanation

  • pipe(some1, O.zipRight(some2)): Bothsome1 andsome2 areSome, so the function returns the secondOption, which isSome(2).
  • pipe(some1, O.zipRight(none)): Since the secondOption isNone, the function returnsNone.
  • pipe(none, O.zipRight(some2)): The firstOption isNone, so the function returnsNone, regardless of the secondOption.

This function is particularly useful when you want to perform an operation where the result is dependent solely on the secondOption.

Example 2: Returning the First Option withO.zipLeft

Concept

TheO.zipLeft function is the counterpart toO.zipRight, allowing you to combine twoOptions while discarding the second and returning the first. Again, this operation succeeds if bothOptions areSome; otherwise, it returnsNone.

Code

functionzipping_ex02(){constsome1=O.some(1);// Create an Option containing the value 1constsome2=O.some(2);// Create an Option containing the value 2constnone=O.none();// Create an Option representing no valueconsole.log(pipe(some1,O.zipLeft(some2)));// Output: Some(1) (returns the first Option)console.log(pipe(some1,O.zipLeft(none)));// Output: None (since the second Option is None)console.log(pipe(none,O.zipLeft(some2)));// Output: None (since the first Option is None)}
Enter fullscreen modeExit fullscreen mode

Explanation

  • pipe(some1, O.zipLeft(some2)): Since bothOptions areSome, the function returns the firstOption, which isSome(1).
  • pipe(some1, O.zipLeft(none)): The secondOption isNone, so the function returnsNone.
  • pipe(none, O.zipLeft(some2)): Since the firstOption isNone, the function returnsNone.

This function is useful when the outcome should be determined by the firstOption, but you still want to ensure the secondOption is valid.

Example 3: Combining Options with a Function usingO.zipWith

Concept

TheO.zipWith function provides the most flexibility, allowing you to combine the values of twoOptions using a provided function. If bothOptions areSome, the function is applied, and the result is wrapped in a newOption. If eitherOption isNone, the function returnsNone.

Code

functionzipping_ex03(){constsome1=O.some(1);// Create an Option containing the value 1constsome2=O.some(2);// Create an Option containing the value 2constnone=O.none();// Create an Option representing no valueconstadd=(a:number,b:number)=>a+b;console.log(pipe(some1,O.zipWith(some2,add)));// Output: Some(3) (since 1 + 2 = 3)console.log(pipe(some1,O.zipWith(none,add)));// Output: None (since the second Option is None)console.log(pipe(none,O.zipWith(some2,add)));// Output: None (since the first Option is None)}
Enter fullscreen modeExit fullscreen mode

Explanation

  • pipe(some1, O.zipWith(some2, add)): BothOptions areSome, so theadd function is applied, resulting inSome(3).
  • pipe(some1, O.zipWith(none, add)): Since the secondOption isNone, the function returnsNone.
  • pipe(none, O.zipWith(some2, add)): The firstOption isNone, so the function returnsNone.

This function is ideal when you need to perform an operation on the values of twoOptions, as it ensures that both values are present before the operation is performed.

Conclusion

ZippingOptions in Effect-TS is a powerful way to combine optional values safely. Whether you're interested in the firstOption, the second, or a combination of both, theO.zipRight,O.zipLeft, andO.zipWith functions provide the tools you need to handle these scenarios efficiently. By understanding and applying these patterns, you can write more robust and predictable functional code.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Joined

More fromAlessandro Maclaine

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp