inline-java: Java interop via inline Java code in Haskell modules.

[ bsd3, deprecated, ffi, java, jvm, library ] [ Propose Tags ]
Deprecated

Please see README.md.


[Skip to Readme]

Modules

[Last Documentation]

  • Language
    • Java
      • Language.Java.Inline
        • Language.Java.Inline.Cabal

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1, 0.5, 0.5.1, 0.6, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.7.0, 0.7.1, 0.7.2, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.9.0, 0.9.1, 0.10.0 (info)
Change log CHANGELOG.md
Dependencies base (>4.9.0.0 && <4.10), binary (>=0.7), bytestring (>=0.10), Cabal (>=1.24), containers (>=0.5), directory (>=1.2), distributed-closure (>=0.3), filepath (>=1), ghc-heap-view (>=0.5), inline-c (>=0.5), jni (>=0.1 && <0.3), jvm (>=0.1 && <0.2), language-java (>=0.2), process (>=1.2), singletons (>=2.0), syb (>=0.6), template-haskell (>=2.10), temporary (>=1.2), text (>=1.2), thread-local-storage (>=0.1), vector (>=0.11) [details]
License BSD-3-Clause
Copyright 2015-2016 EURL Tweag.
Author Tweag I/O
Maintainer m@tweag.io
Revised Revision 2 made by MathieuBoespflug at 2017-08-18T08:08:55Z
Category FFI, JVM, Java
Home page http://github.com/tweag/inline-java#readme
Source repo head: git clone https://github.com/tweag/inline-java
Uploaded by MathieuBoespflug at 2016-12-27T09:55:09Z
Distributions
Reverse Dependencies 3 direct, 1 indirect [details]
Downloads 11606 total (46 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-12-27 [all 3 reports]

Readme for inline-java-0.6.1

[back to package description]

inline-java: Call any JVM function from Haskell

wercker status

NOTE: you'll need GHC >= 8.0.2 to compile and use this package. Use

stack --nix build

ahead of a new GHC release to build using GHC 8.0.2-rc2.

The Haskell standard includes a native foreign function interface (FFI). It can be a pain to use and in any case only C support is implemented in GHC. inline-java lets you call any JVM function directly, from Haskell, without the need to write your own foreign import declarations using the FFI. In the style of inline-c for C and inline-r for calling R, inline-java lets you name any function to call inline in your code.

Example

Graphical Hello World using Java Swing:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where

import Data.Int
import Data.Text (Text)
import Language.Java
import Language.Java.Inline

main :: IO Int32
main = withJVM [] $ do
    -- Extra type annotation workaround for current GHC HEAD.
    message :: J ('Class "java.lang.String") <- reflect ("Hello World!" :: Text)
    [java| { javax.swing.JOptionPane.showMessageDialog(null, $message);
             return 0; } |]

Building it

Requirements:

  • the Stack build tool (version 1.2 or above);
  • either, the Nix package manager,
  • or, OpenJDK, Gradle and Spark (version 1.6) installed from your distro.

To build:

$ stack build

You can optionally get Stack to download a JDK in a local sandbox (using Nix) for good build results reproducibility. This is the recommended way to build inline-java. Alternatively, you'll need it installed through your OS distribution's package manager for the next steps (and you'll need to tell Stack how to find the JVM header files and shared libraries).

To use Nix, set the following in your ~/.stack/config.yaml (or pass --nix to all Stack commands, see the Stack manual for more):

nix:
  enable: true

License

Copyright (c) 2015-2016 EURL Tweag.

All rights reserved.

inline-java is free software, and may be redistributed under the terms specified in the LICENSE file.

About

Tweag I/O

inline-java is maintained by Tweag I/O.

Have questions? Need help? Tweet at @tweagio.