From 76718c0ec3717c4f9e5b0f659ab829f4b92419d2 Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 2 Mar 2019 12:50:34 +0100 Subject: playing with some haskell code --- hask-io/Makefile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ hask-io/mini.c | 14 ++++++++++++++ hask-io/mini.hs | 3 +++ 3 files changed, 63 insertions(+) create mode 100644 hask-io/Makefile create mode 100644 hask-io/mini.c create mode 100644 hask-io/mini.hs (limited to 'hask-io') diff --git a/hask-io/Makefile b/hask-io/Makefile new file mode 100644 index 0000000..e6e1da6 --- /dev/null +++ b/hask-io/Makefile @@ -0,0 +1,46 @@ +# +# Some GHC flags explained +# +# -v verbose mode +# -O2 level 2 optimizations +# -rtsopts allow +RTS flags +# -prof enable basic time and allocation profiling +# -auto-all cost centers on all top level functions +# (you can also add them via the SCC pragma) +# -caf-all generate data for CAFs (constant applicative forms) +# t +# -fforce-recomp force recompilation +# +# Notes: you will obtain the profiling versions of dependancies via: +# stack install --profile [libraryname] +# +# -fprof-auto replaced -auto-all +# -fprof-cafs replaced -caf-all +# + +build-prof: + stack ghc --profile -- -rtsopts -prof -fprof-auto -fprof-cafs -O2 base64.hs + +# +# Some +RTS flags +# +# -p profiling +# -K set stack limit +# -hc extract heap profile +# -hy allocation by type +# -hd allocation by constructor +# -iN sampling frequency in seconds. e.g. -i0.01 +# -ddump-simpl generate core version +# +# Note: render the heap profile as graph with: hp2ps -e8in -c file.hp +# + +run-prof: + cat random.bin | ./base64 +RTS -p -K100M > /dev/null + + +test-mini-hask: + #stack ghc -- -rtsopts -prof -fprof-auto -fprof-cafs -O mini.hs -o mini_hask_exe + stack ghc -- -O mini.hs -o mini_hask_exe +test-mini-c: + gcc -O3 mini.c -o mini_c_exe diff --git a/hask-io/mini.c b/hask-io/mini.c new file mode 100644 index 0000000..eb5ba46 --- /dev/null +++ b/hask-io/mini.c @@ -0,0 +1,14 @@ +#include +int main(){ + char buf[2048]; + int a=0; + while(1){ + size_t sz=fread(&buf,1,2048,stdin); + if(!sz)break; + for(size_t i=0;i>=print.show.f + where f = B.foldl1' (+) -- cgit v1.2.3