Skip to content

byteally/wasmedge

Repository files navigation

WasmEdge-Haskell

Haskell binding to WasmEdge Runtime for hosting

Status GitHub Issues GitHub Pull Requests License

Introduction

WasmEdge-Haskell is a library that allows you to use WebAssembly code (.wasm) in your Haskell projects at near-native speed. It's a Haskell binding for the WasmEdge C-SDK, allowing you to use Haskell as a host application and embed WebAssembly functions written in other languages.

Getting Started

Prerequisites

  1. Install WasmEdge

     $ curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
    
  2. Clone this repository into your Haskell project.

     with-compiler: ghc-9.2.8
    
     source-repository-package
     type: git
     location: git@github.com:byteally/wasmedge.git
     tag: 80f3635a2b3f5346c85ef55bd599b081ebc995d8 -- use latest commit tag here
    
     packages:
         <project-name>.cabal
    
  3. Specify the package in your project's .cabal file as a dependency.

     build-depends:    base ^>= 4.11.1.0
                       ,wasmedge
    

🎈 Usage

Below is an example of using the vmRunWasmFromFile function, assuming you have a addTwo.wasm file which contains a function named addTwo.

{-# LANGUAGE OverloadedStrings #-} -- for conversion of String and WasmString
module Main where

import WasmEdge.Configure
import WasmEdge.Internal.FFI.Bindings (HostRegistration(HostRegistration_Wasi),WasmVal(WasmInt32))
import WasmEdge.VM
import qualified Data.Vector as V

addTwoNumbers :: Int -> Int -> IO ()
addTwoNumbers x y = do
    Just cfg <- configureCreate
    configureAddHostRegistration cfg HostRegistration_Wasi  --optional
    Just vm <- vmCreate (Just cfg) Nothing
    addTwoRes <- vmRunWasmFromFile vm "./wasm/addTwo.wasm" "addTwo" (V.fromList [WasmInt32 (fromIntegral x),WasmInt32 (fromIntegral y)]) 1
    print (snd addTwoRes)

main :: IO ()
main = addTwoNumbers 2 3

Output

[5]

API Reference

The API Documentation would be available on Hackage soon.

Reference

For more information, please refer to the WasmEdge's Embed Documentation.

✍️ Authors

Contribution

Contributions are welcome! Feel free to fork the repository or submit a pull request.

About

Haskell binding to WasmEdge Runtime for hosting

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published