• ¶
    #! /usr/bin/env nix-shell
    #! nix-shell -i runhaskell -p 'ghc.withPackages(pkgs: with pkgs; [Spock])'
    
    {-# LANGUAGE OverloadedStrings #-}
    
    import Data.Monoid
        ( (<>) )
    
    import Web.Spock
        ( SpockM, runSpock, spock, get, text
  • ¶

    operator that combines two path components

        , (<//>)
  • ¶

    placeholder for a path parameter

        , var
  • ¶
        )
    
    import Web.Spock.Config
        ( SpockCfg ( spc_csrfProtection )
        , PoolOrConn ( PCNoDatabase )
        , defaultSpockCfg
        )
    
    data AppSession = EmptySession
    data AppState = EmptyState
    
    main :: IO ()
    main = do
        defConfig <- defaultSpockCfg EmptySession PCNoDatabase EmptyState
        let config = defConfig { spc_csrfProtection = True }
        runSpock 5000 (spock config' webapp)
    
    webapp :: SpockM () AppSession AppState ()
    webapp = do
  • ¶

    This route handles GET /hola/<placeholder>.

    Try visiting:

    • http://localhost:5000/hola/amigo
    • http://localhost:5000/hola/amigo/numero/dos
        get ("hola" <//> var) $ \name -> do
            text ("Hola " <> name <> "!  ¿Qué pasó?")