Add appleKit.hs

This commit is contained in:
千住柱間 2026-10-15 02:35:49 +00:00
commit 9dedb2c34d

57
appleKit.hs Normal file
View file

@ -0,0 +1,57 @@
{-
install my lib: https://github.com/KonstantinDjairo/haskell-obj-c
then:
$ appleKit.hs -o hello \
-package haskell-obj-c \
-package libffi \
-framework AppKit
-}
import Foreign.C.String (withCString)
import Foreign.LibFFI (argPtr, retPtr, retVoid, retCULong)
import Foreign.Ptr (castPtr)
import ObjC.Runtime
main :: IO ()
main = withAutoreleasePool $ do
loadFramework "AppKit"
appClass <- getRequiredClass "NSApplication"
_ <- sendClassMsg appClass (mkSelector "sharedApplication")
(retPtr retVoid) []
alertClass <- getRequiredClass "NSAlert"
alertPtr <- sendClassMsg alertClass (mkSelector "new")
(retPtr retVoid) []
let alert = RawId (castPtr alertPtr)
stringClass <- getRequiredClass "NSString"
title <- makeString stringClass "Hello from Haskell"
detail <- makeString stringClass "RawId-only AppKit test."
let RawId titlePtr = title
RawId detailPtr = detail
_ <- sendRawMsg alert (mkSelector "setMessageText:")
retVoid [argPtr titlePtr]
_ <- sendRawMsg alert (mkSelector "setInformativeText:")
retVoid [argPtr detailPtr]
_ <- sendRawMsg alert (mkSelector "runModal")
retCULong []
pure ()
makeString :: Class -> String -> IO RawId
makeString cls s =
withCString s $ \cs -> do
ptr <- sendClassMsg cls (mkSelector "stringWithUTF8String:")
(retPtr retVoid) [argPtr cs]
pure (RawId (castPtr ptr))