ghc - Using #if-#else-#endif in Haskell -
i have 2 versions of same program little changes between two. instead of having separate files, use #if defined (par)
- #else
- #endif
, compile or without -cpp -dpar
switch between 2 versions. way have work on single hs file. however, since aim write parallel/optimised version of original program, wonder if using #if-#else#-endif
has performance implication? explanation of how works under hood. thanks
#if defined(par) import control.parallel import control.parallel.strategies import control.deepseq #endif #if defined(par) test = sum ( map expensivefunc mylist `using` strat ) strat = parlistchunk 100 rseq #else test = sum ( map expensivefunc mylist ) #endif
note:
instead of -cpp
flag, use language options in source file:
e.g. {-# language cpp #-}
but still need provide (or not) -dxxx
when compiling in order choose part of program compiler should ignore ( xxx defined variable in hs file).
c preprocessor directives in effect during compilation. compiler cuts out lines within #ifdef block , compiles program usual, there no runtime performance penalty.
Comments
Post a Comment