forked from functionaljava/functionaljava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIOW.java
More file actions
45 lines (32 loc) · 1.01 KB
/
IOW.java
File metadata and controls
45 lines (32 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package fj.data;
import fj.F;
import fj.Unit;
import java.io.IOException;
/**
* Created by MarkPerry on 9/06/2015.
*/
public final class IOW<A> implements IO<A> {
private final IO<A> io;
private IOW(IO<A> in) {
io = in;
}
public static <A> IOW<A> lift(IO<A> io) {
return new IOW<>(io);
}
@Override
public A run() throws IOException {
return io.run();
}
public SafeIO<Validation<IOException, A>> safe() {
return IOFunctions.toSafeValidation(io);
}
public <B> IOW<B> map(F<A, B> f) { return lift(IOFunctions.map(io, f)); }
public <B> IOW<B> bind(F<A, IO<B>> f) { return lift(IOFunctions.bind(io, f)); }
public <B> IOW<B> append(IO<B> iob) { return lift(IOFunctions.append(io, iob)); }
public static IOW<LazyString> getContents() {
return lift(() -> IOFunctions.getContents().run());
}
public static IOW<Unit> interact(F<LazyString, LazyString> f) {
return lift(() -> IOFunctions.interact(f).run());
}
}