Advertisement
Guest User

Basic pipelines in Erlang

a guest
Sep 6th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.84 KB | None | 0 0
  1. -spec pipe([Fun], Value) -> Result
  2.     when Fun      :: fun((Value) -> Result),
  3.          Value    :: term(),
  4.          Result   :: {ok, NewValue}
  5.                    | {error, Reason}
  6.                    | {error, Reason, Info},
  7.          NewValue :: term(),
  8.          Reason   :: term(),
  9.          Info     :: {Fun, Value}
  10.                    | {Fun, Value, Info}.
  11.  
  12. pipe([F | Fs], Value) ->
  13.     case F(Value) of
  14.         {ok, Result}          -> pipe(Fs, Result);
  15.         {error, Reason}       -> {error, Reason, {F, Value}};
  16.         {error, Reason, Info} -> {error, Reason, {F, Value, Info}}
  17.     end;
  18. pipe([], Value) ->
  19.     {ok, Value}.
  20.  
  21.  
  22. -spec pipe([Fun], Value, State) -> Result
  23.     when Fun      :: fun((Value, State) -> Result),
  24.          Value    :: term(),
  25.          Result   :: {ok, NewValue}
  26.                    | {ok, NewValue, NewState}
  27.                    | {error, Reason}
  28.                    | {error, Reason, Info},
  29.          NewValue :: term(),
  30.          NewState :: term(),
  31.          Reason   :: term(),
  32.          Info     :: {Fun, Value}
  33.                    | {Fun, Value, State}
  34.                    | {Fun, Value, State, Info}.
  35.  
  36. pipe([F | Fs], Value, State) ->
  37.     case F(Value, State) of
  38.         {ok, Result}           -> pipe(Fs, Result, State);
  39.         {ok, Result, NewState} -> pipe(Fs, Result, NewState);
  40.         {error, Reason}        -> {error, Reason, {F, Value, State}};
  41.         {error, Reason, Info}  -> {error, Reason, {F, Value, State, Info}}
  42.     end;
  43. pipe([], Value, State) ->
  44.     {ok, Value, State}.
  45.  
  46.  
  47. some_long_operation(Value) ->
  48.     Transform =
  49.         [fun a/1,
  50.          fun b/1,
  51.          fun c/1,
  52.          fun d/1],
  53.     pipe(Transform, Value).
  54.  
  55.  
  56. some_long_operation(Value, State) ->
  57.     Transform =
  58.         [fun a/2,
  59.          fun b/2,
  60.          fun c/2,
  61.          fun d/2],
  62.     pipe(Transform, Value, State).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement