Process the same input file concurrently Let's say we have a text file that contains 2 different types of lines. For the sake of example, one group starts with "i:" (for Integer) and the other group starts with "s:" (for String), something like the following file: s:New york s:Apple i:387548 s:Amsterdam i:4556 i:39874 s:Orange i:56787 s:Banana i:4657567 s:Turkey i:45679456 s:Iran i:4356456 i:23423 i:456 s:Ukraine i:453645 i:5456 We want to process these input lines separately but concurrently. And the process can be anything, for this example, we just print them to the console. But what matters is that we open the file only for READ so 2 different processes (or routines) can read the file at the same time. The Cats Effect answer to open files (or in general any resources) in a safe and efficient way, is Resource class. So we need a function to take the path to the file and give us a Resource of some type that allows us to read the file line by line. One o...
In this post, I try to show you some more examples of fundamental tasks on an IO object. We have seen 3 of these examples in the part one of IO class exercises.
Exercise 4:
Writing a function that takes an IO object and converts it to another data type:
def convert[A, B](ioa: IO[A], value: B): IO[B] = ???Of course, we want to wrap the value in an IO but also we want to make sure the receiving IO of A has been completed. We can use the famous map method that a monad has.
def convert[A, B](ioa: IO[A], value: B): IO[B] = ioa.map(_ => value)This map operation on IO is so popular that there is method for that on IO class, so we can write the second version of this function like:
def convert[A, B](ioa: IO[A], value: B): IO[B] = ioa.as(value)
Comments
Post a Comment