diff --git a/README.md b/README.md index 92df979..ac22904 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,83 @@ -# wasmedge -Haskell binding to WasmEdge Runtime for hosting +

WasmEdge-Haskell

+ +
+ +## Haskell binding to [WasmEdge](https://wasmedge.org/) Runtime for hosting + + + [![Status](https://img.shields.io/badge/status-active-success.svg)]() + [![GitHub Issues](https://img.shields.io/github/issues/kylelobo/The-Documentation-Compendium.svg)](https://github.com/byteally/wasmedge/issues) + [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kylelobo/The-Documentation-Compendium.svg)](https://github.com/byteally/wasmedge/pulls) + [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) + +
+ +## 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](https://wasmedge.org/docs/embed/c/intro), 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: + .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`. + +```Haskell +{-# 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 +```bash +[5] +``` + +## API Reference +The API Documentation would be available on Hackage soon. + +## Reference +For more information, please refer to the WasmEdge's [Embed](https://wasmedge.org/docs/embed/overview) Documentation. + +## ✍️ Authors +- [@mageshb](https://github.com/mageshb) - Idea & Initial work +- [@tusharad](https://github.com/tusharad) - Contributed + +## Contribution + +Contributions are welcome! Feel free to fork the repository or submit a pull request. \ No newline at end of file