Code Monkey home page Code Monkey logo

Comments (6)

facundominguez avatar facundominguez commented on May 30, 2024

cc @edsko

from inline-java.

facundominguez avatar facundominguez commented on May 30, 2024

TH seems to do fine when getting the type synonyms.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

import Data.Int
import Foreign.JNI
import Language.Java
import qualified Language.Haskell.TH.Syntax as TH

type JL = J ('Class "java.lang.Long")

main :: IO Int32
main = withJVM [] $ do
    jlong <- new [JLong 1] :: IO (J ('Class "java.lang.Long"))
    $(do TH.addModFinalizer $ TH.reify 'jlong >>= TH.runIO . print
         [| return () |]
     )
    let jlong = jlong :: JL
    $(do TH.addModFinalizer $ TH.reify 'jlong >>= TH.runIO . print
         [| return () |]
     )
    return 0
$ ghc -fforce-recomp t1.hs
[1 of 1] Compiling Main             ( t1.hs, t1.o )
VarI jlong_6989586621679068031 (ConT Main.JL) Nothing
VarI jlong_6989586621679065775 (AppT (ConT Foreign.JNI.Types.J) (AppT (ConT Foreign.JNI.Types.Class) (LitT (StrTyLit "java.lang.Long")))) Nothing
Linking t1 ...

from inline-java.

facundominguez avatar facundominguez commented on May 30, 2024

This test case still fails. Compilation succeeds, but running the program does not complete.

from inline-java.

mboes avatar mboes commented on May 30, 2024

That's because of a mistake in your test: let jlong = jlong is equivalent to defining undefined.

from inline-java.

facundominguez avatar facundominguez commented on May 30, 2024

ha! sorry about that

from inline-java.

facundominguez avatar facundominguez commented on May 30, 2024

How about this program:

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}

import Data.Int
import Foreign.JNI
import Language.Java
import Language.Java.Inline

type JL = 'Class "java.lang.Long"

main :: IO Int32
main = withJVM [] $ do
    jlong <- new [JLong 1]
--               :: IO (J ('Class "java.lang.Long"))
               :: IO (J JL)
    [java| {
      System.out.println($jlong.toString());
      return 0;
      } |]

Building fails with

t.hs:17:11: error:
    • unliftJType: cannot unlift Main.JL
    • In a stmt of a 'do' block:
        (((unsafeUncoerce . coerce)
          <$>
            ((Language.Java.Inline.loadJavaWrappers
              >>
                (callStatic
                   (sing :: Sing "io.tweag.inlinejava.Inline__main_Main")
                   (Data.String.fromString "function_6989586621679035869")
                   [coerce jlong_a4c5])) ::
               IO (J (Class "java.lang.Object")))))
      In the second argument of ‘($)’, namely
        ‘do { jlong <- new [JLong 1] :: IO (J JL);
              (((unsafeUncoerce . coerce)
                <$>
                  ((Language.Java.Inline.loadJavaWrappers
                    >>
                      (callStatic
                         (sing :: Sing "io.tweag.inlinejava.Inline__main_Main")
                         (Data.String.fromString "function_6989586621679035869")
                         [coerce jlong_a4c5])) ::
                     IO (J (Class "java.lang.Object"))))) }’
      In the expression:
        withJVM []
        $ do { jlong <- new [JLong 1] :: IO (J JL);
               (((unsafeUncoerce . coerce)
                 <$>
                   ((Language.Java.Inline.loadJavaWrappers
                     >>
                       (callStatic
                          (sing :: Sing "io.tweag.inlinejava.Inline__main_Main")
                          (Data.String.fromString "function_6989586621679035869")
                          [coerce jlong_a4c5])) ::
                      IO (J (Class "java.lang.Object"))))) }

t.hs:17:11: error:
    • Q monad failure
    • In a stmt of a 'do' block:
        (((unsafeUncoerce . coerce)
          <$>
            ((Language.Java.Inline.loadJavaWrappers
              >>
                (callStatic
                   (sing :: Sing "io.tweag.inlinejava.Inline__main_Main")
                   (Data.String.fromString "function_6989586621679035869")
                   [coerce jlong_a4c5])) ::
               IO (J (Class "java.lang.Object")))))
      In the second argument of ‘($)’, namely
        ‘do { jlong <- new [JLong 1] :: IO (J JL);
              (((unsafeUncoerce . coerce)
                <$>
                  ((Language.Java.Inline.loadJavaWrappers
                    >>
                      (callStatic
                         (sing :: Sing "io.tweag.inlinejava.Inline__main_Main")
                         (Data.String.fromString "function_6989586621679035869")
                         [coerce jlong_a4c5])) ::
                     IO (J (Class "java.lang.Object"))))) }’
      In the expression:
        withJVM []
        $ do { jlong <- new [JLong 1] :: IO (J JL);
               (((unsafeUncoerce . coerce)
                 <$>
                   ((Language.Java.Inline.loadJavaWrappers
                     >>
                       (callStatic
                          (sing :: Sing "io.tweag.inlinejava.Inline__main_Main")
                          (Data.String.fromString "function_6989586621679035869")
                          [coerce jlong_a4c5])) ::
                      IO (J (Class "java.lang.Object"))))) }

from inline-java.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.