Skip to content

arrayfire/arrayfire-haskell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fa74dd8 · Dec 14, 2024
Jun 21, 2019
Oct 20, 2019
Oct 21, 2019
Jun 19, 2019
Nov 6, 2019
Oct 20, 2019
Dec 14, 2024
May 4, 2024
Oct 2, 2022
Oct 2, 2022
Nov 16, 2018
Nov 16, 2018
Nov 7, 2019
Oct 19, 2019
Dec 14, 2024
Aug 25, 2023
Oct 2, 2022
Aug 24, 2023
Aug 24, 2023
Nov 15, 2019
Oct 2, 2022
Oct 2, 2022
Oct 2, 2022

Repository files navigation

ArrayFire is a general-purpose library that simplifies the process of developing software that targets parallel and massively-parallel architectures including CPUs, GPUs, and other hardware acceleration devices.

arrayfire-haskell is a Haskell binding to ArrayFire.

Table of Contents

Installation

Install ArrayFire via the download page.

ArrayFire can also be fetched from nixpkgs master.

Haskell Installation

arrayfire can be installed w/ cabal, stack or nix.

cabal install arrayfire
stack install arrayfire

Also note, if you plan on using ArrayFire's visualization features, you must install fontconfig and glfw on OSX or Linux.

Documentation

Hacking

To hack on this library locally, complete the installation step above. We recommend installing the nix package manager to facilitate development.

After the above tools are installed, clone the source from Github.

git clone git@github.com:arrayfire/arrayfire-haskell.git
cd arrayfire-haskell

To build and run all tests in response to file changes

nix-shell --run test-runner

To perform interactive development w/ ghcid

nix-shell --run ghcid

To interactively evaluate code in the repl

nix-shell --run repl

To produce the haddocks and open them in a browser

nix-shell --run docs

Example

{-# LANGUAGE TypeApplications, ScopedTypeVariables #-}
module Main where

import qualified ArrayFire as A
import           Control.Exception (catch)

main :: IO ()
main = print newArray `catch` (\(e :: A.AFException) -> print e)
  where
    newArray = A.matrix @Double (2,2) [ [1..], [1..] ] * A.matrix @Double (2,2) [ [2..], [2..] ]

{-|

ArrayFire Array
[2 2 1 1]
    2.0000     6.0000
    2.0000     6.0000

-}