Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. {-# LANGUAGE MagicHash, BangPatterns #-}
  2. module Main where
  3.  
  4. import GHC.Exts
  5.  
  6. {-# NOINLINE f #-}
  7. f :: (Int# -> Float# -> Double# -> Float# -> Double# -> String) -> String
  8. f g = g 3# 4.0# 5.0## 6.0# 6.9## ++ " World!"
  9.  
  10. {-# NOINLINE p #-}
  11. p :: Int# -> Float# -> Double# -> Float# -> Double# -> String
  12. p i j k l m = "Hello"
  13.  
  14. {-# NOINLINE q #-}
  15. q :: Int# -> Int# -> Float# -> Double# -> Float# -> Double# -> String
  16. q _ i j k l m = "Hello " ++ show (F# l) ++ " " ++ show (D# m)
  17.  
  18. {-# NOINLINE r #-}
  19. r :: Int# -> Float# -> Double# -> Float# -> Double# -> String
  20. r i = let !(I# z) = length [I# 1# .. I# i] in \j k l m -> p z j k l m
  21. -- ghc won't eta-expand around the length, because it has unknown cost
  22.  
  23. main = do
  24. putStrLn (f p) -- fast call
  25. putStrLn (f r) -- slow call: function but wrong arity
  26. let g = last [q 1#]
  27. putStrLn (f g) -- slow call: thunk
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement