To create a function that takes a fun as an argument
   1: mangle(F, X) ->
       2:     F(X).
4> play:mangle(fun(X) -> (X*X) end, 3).
Remember that if you’re defining the fun inline to add the end still – or you’ll see
* 1: syntax error before: ')'
To pass in a function to something that needs a fun, pass a function reference and remember the arity
1: double(X) ->
   2:     2*X.
6> play:mangle(fun play:double/1, 3). 6
And finally to create a function that returns a fun
   1: getMangler() ->
       2:     (fun(X) ->
    3: play:double(X) end).
   4:  
1> Mangler = play:getMangler(). #Fun<play.0.65855982> 2> Mangler(3). 6 3> play:mangle(Mangler, 3). 6
and you can naturally just put the getMangler into the call direct:
4> play:mangle(play:getMangler(), 3). 6
Note that this won’t work:
5> play:mangle(fun play:getMangler/0, 3).
** exception error: play:getMangler/0 called with one argument
     in function  play:mangle/2
because you’re attempting to call getMangler with the argument 3.