This is how I think it should look.
{-# LANGUAGE QuasiQuotes, TypeFamilies, GeneralizedNewtypeDeriving, TemplateHaskell, OverloadedStrings, GADTs, FlexibleContexts #-} module Main where import Control.Monad.IO.Class (liftIO) import Data.String (fromString) import Database.Persist import Database.Persist.TH import Database.Persist.Sqlite import Network.Wai.Application.Static (staticApp, defaultWebAppSettings, defaultFileServerSettings) import Network.Wai.Handler.Warp (runSettings, defaultSettings, settingsIntercept, settingsPort) import Network.Wai.Handler.WebSockets (intercept) import qualified Network.WebSockets as WS share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase| Person name String age Int deriving Show |] ws :: WS.Request -> WS.WebSockets WS.Hybi10 () ws r = do WS.acceptRequest r liftIO $ runSqlite ":memory:" $ do runMigration migrateAll michaelId <- insert $ Person "Michael" 26 michael <- get michaelId liftIO $ print michael main :: IO () main = runSettings defaultSettings { settingsPort = 9160 , settingsIntercept = intercept $ ws } $ staticApp (defaultFileServerSettings $ fromString ".")
Gert cuykens
source share