https://github.com/dmjio/servant-wasm
Servant support for delivering WebAssembly
https://github.com/dmjio/servant-wasm
haskell servant wasm
Last synced: 10 months ago
JSON representation
Servant support for delivering WebAssembly
- Host: GitHub
- URL: https://github.com/dmjio/servant-wasm
- Owner: dmjio
- License: bsd-3-clause
- Created: 2020-05-16T21:28:16.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-12-14T00:51:14.000Z (about 1 year ago)
- Last Synced: 2025-03-19T09:28:52.881Z (11 months ago)
- Topics: haskell, servant, wasm
- Language: Haskell
- Homepage: https://hackage.haskell.org/package/servant-wasm
- Size: 11.7 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
servant-wasm
==========================
[](http://hackage.haskell.org/package/servant-wasm)
[](https://haskell.org)
[](https://github.com/dmjio/servant-wasm/blob/master/LICENSE)
[](https://travis-ci.org/dmjio/servant-wasm)
Content-Type support for delivering WASM with [servant](https://github.com/haskell-servant/servant)
### Usage
```haskell
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad.IO.Class (liftIO)
import qualified Data.ByteString as B
import Data.ByteString (ByteString)
import Data.Proxy (Proxy (Proxy))
import Network.Wai.Handler.Warp (run)
import Servant.Server (serve, Handler)
import Servant.API ((:>), Get)
import Servant.WASM (WASM)
type API = "wasm" :> Get '[WASM] ByteString
main :: IO ()
main = do
putStrLn "Running on 3000..."
run 3000 (serve (Proxy @ API) wasmHandler)
wasmHandler :: Handler ByteString
wasmHandler = liftIO (B.readFile "hello.wasm")
```
and corresponding JS to fetch WASM client-side.
```js
const importObject = {};
WebAssembly.instantiateStreaming(fetch('/wasm'), importObject).then(results => {
// Do something with the results!
});
```