1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
{-# LANGUAGE MagicHash, GHCForeignImportPrim, UnboxedTuples, UnliftedFFITypes #-}
import GHC.Exts
foreign import prim "someFuncF"
someFuncF :: Float# -> Float# -> Float# -> Float# -> (# Float#, Float#, Float#, Float# #)
foreign import prim "someFuncD"
someFuncD :: Double# -> Double# -> Double# -> Double# -> (# Double#, Double#, Double#, Double# #)
{-
someFuncF :: Float# -> Float# -> Float# -> Float# -> (# Float#, Float#, Float#, Float# #)
someFuncF x y z w = (# x `plusFloat#` y, x `minusFloat#` y, z `timesFloat#` w, z `divideFloat#` w #)
someFuncD :: Double# -> Double# -> Double# -> Double# -> (# Double#, Double#, Double#, Double# #)
someFuncD x y z w = (# x +## y, x -## y, z *## w, z /## w #)
-}
main = do
case someFuncF 1.0# 3.0# 4.0# 2.0# of
(# a, b, c, d #) -> do
print (F# a)
print (F# b)
print (F# c)
print (F# d)
case someFuncD 1.0## 3.0## 4.0## 2.0## of
(# a, b, c, d #) -> do
print (D# a)
print (D# b)
print (D# c)
print (D# d)
|