{-# LANGUAGE BangPatterns #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE DataKinds #-} module Main where import ArrayFire import Control.Concurrent import Control.Exception import Prelude hiding (sum, product) -- import GHC.RTS foreign import ccall safe "test_bool" testBool :: IO () foreign import ccall safe "test_window" testWindow :: IO () main' :: IO () main' = print newArray `catch` (\(e :: AFException) -> print e) where newArray = matrix @Double (2,2) [ [1..], [1..] ] * matrix @Double (2,2) [ [2..], [2..] ] main :: IO () main = do main' -- testWindow -- ks <- randn @Double [100,100] -- saveArray "key" ks "array.txt" False -- !ks' <- readArrayKey "array.txt" "key" -- print ks' -- info >> putStrLn "ok" >> afInit -- -- Info things -- print =<< getSizeOf (Proxy @ Double) -- print =<< getVersion -- print =<< getRevision -- -- getInfo -- -- print =<< errorToString afErrNoMem -- putStrLn =<< getInfoString -- print =<< getDeviceCount -- print =<< getDevice -- -- Create and print an array -- -- arr1 <- constant 1 1 1 f64 -- -- arr2 <- constant 2 1 1 f64 -- -- r <- addArray arr1 arr2 True -- -- printArray r -- -- print =<< isLAPACKAvailable -- -- print =<< getAvailableBackends -- -- print =<< getActiveBackend -- -- print =<< getAvailableBackends -- -- array <- constant @'(10,10) 200 -- -- putStrLn "backend id" -- -- print (getBackendID array) -- -- putStrLn "device id" -- -- print (getDeviceID array) -- -- array <- randu @'(9,9,9) @Double -- -- printArray array -- printArray (mean array 0) -- -- printArray (add array 1) -- -- putStrLn "got eeem" -- -- print =<< getDataPtr x -- -- x <- constant 10 1 1 f64 -- -- printArray =<< mean x 0 -- -- print =<< isLAPACKAvailable -- a <- randu @'(3,3) @Float -- b <- randu @'(3,3) @Float -- printArray ((a `matmul` b) None None) -- `catch` (\(e :: AFException) -> do -- putStrLn "got one" -- print e) putStrLn "create window" window <- createWindow 200 200 "hey" putStrLn "set visibility" setVisibility window True putStrLn "show window" showWindow window threadDelay (secs 10) -- -- print =<< getActiveBackend -- -- print =<< getDeviceCount -- -- print =<< getDevice -- -- putStrLn "info" -- -- getInfo -- -- putStrLn "info string" -- -- putStrLn =<< getInfoString -- -- print =<< getVersion secs :: Int -> Int secs = (*1000000)