I hereby claim:
- I am 0xyuanti on github.
- I am yuanti (https://keybase.io/yuanti) on keybase.
- I have a public key ASAVjKmujfL5xp2V7HHVm9HVxufwaZkwQp7W34Mu4c6mnwo
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
| object icm { | |
| // Types | |
| type Player = Int | |
| type Chips = Double | |
| type Stacks = Map[Player, Chips] | |
| type Rank = Int | |
| type Money = Double |
| -module(bench). | |
| -compile(export_all). | |
| %% Luke Gorrie's favourite profiling macro. | |
| -define(TIME(Tag, Expr), | |
| (fun() -> | |
| %% NOTE: timer:tc/4 does an annoying 'catch' so we | |
| %% need to wrap the result in 'ok' to be able to | |
| %% detect an unhandled exception. | |
| {__TIME, __RESULT} = |
| // this seems like a useful FS2 Stream function, is it already built in? | |
| // Folds a function into a stream and gives you a stream of the intermediate | |
| // accumulator values, i.e.: | |
| // > val ones = Stream.iterate(1)(x => x) | |
| // > ones.foldIncremental(0)(_ + _) take 3 toList | |
| // ==> List[Int] = List(1, 2, 3) | |
| implicit class StreamOps[F[_], O](private val self: Stream[F, O]) { | |
| def foldIncremental[O2](z: O2)(f: (O2, O) => O2): Stream[F, O2] = | |
| self.mapAccumulate(z) { |
| import fs2.interop.scalaz._ | |
| import fs2.{Scheduler, Strategy, time} | |
| import scala.concurrent.duration._ | |
| import scalaz.concurrent.{Task => ZTask} | |
| // porting some code from scalaz.concurrent.chan to fs2... | |
| // we need to call a few external rest apis every N seconds and process the results. | |
| object App { | |
| def main(args: Array[String]): Unit = { |
| adding | |
| type intLeaf = | Leaf int; | |
| results in | |
| jakob@crunchy:/usr/home/jakob/git/botcloud/telegram-re$ rebuild -pkg cohttp.lwt wtf.native | |
| + /usr/local/bin/ocamldep.opt -modules -pp refmt -impl wtf.re | tee wtf.re.depends wtf.ml.depends | |
| Fatal error: exception Not_found | |
| File "wtf.re", line 1: |
| /* example from cohttp readme, works with rebuild -pkg cohttp.lwt wtf.native */ | |
| open Lwt; | |
| open Cohttp; | |
| open Cohttp_lwt_unix; | |
| let coroutine = | |
| Client.get (Uri.of_string "http://www.reddit.com/") >>= fun (resp, body) => { | |
| let code = resp |> Response.status |> Code.code_of_status; | |
| Printf.printf "Response code: %d\n" code; |
| {function, recv, 1, 9}. | |
| {label,8}. | |
| {line,[{location,"reftrick.erl",33}]}. | |
| {func_info,{atom,reftrick},{atom,recv},1}. | |
| {label,9}. | |
| {test,is_eq_exact,{f,10},[{x,0},{integer,0}]}. | |
| {move,{atom,ok},{x,0}}. | |
| return. | |
| {label,10}. | |
| {allocate_zero,1,1}. |
| Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] | |
| Eshell V5.9.2 (abort with ^G) | |
| 1> c(reftrick). | |
| {ok,reftrick} | |
| 2> spawn(fun() -> reftrick:plain() end). | |
| <0.38.0> | |
| time(reftrick): 3.410ms recv1 | |
| time(reftrick): 704.826ms recv2 | |
| 3> spawn(fun() -> reftrick:plain() end). |
| -module(reftrick). | |
| -compile(export_all). | |
| %% Luke Gorrie's favourite profiling macro. | |
| -define(TIME(Tag, Expr), | |
| (fun() -> | |
| %% NOTE: timer:tc/4 does an annoying 'catch' so we | |
| %% need to wrap the result in 'ok' to be able to | |
| %% detect an unhandled exception. | |
| {__TIME, __RESULT} = |