<div dir="ltr"><p style="font-size:15.008px;font-family:Arial,sans-serif">I’m happy to announce the latest release of <a href="https://github.com/anton-k/mig" style="background-color:transparent;text-decoration-line:none">mig-0.2</a> library. It is a library to write composable servers for simple / boring haskell. The main focus of this release is the ability to serve Swagger UI from the server with ease and ability to create clients from the same code as servers. I’m happy to confirm that both goals are reached with this release.</p><p style="font-size:15.008px;font-family:Arial,sans-serif">The <a href="https://anton-k.github.io/mig/" style="background-color:transparent;text-decoration-line:none">tutorial for the library</a> was created.</p><p style="font-size:15.008px;font-family:Arial,sans-serif">Also there are many other improvements:</p><ul style="margin:1em 0px 1em 1.25em;padding:0px;font-family:Arial,sans-serif;font-size:15.008px"><li>OpenApi schema for servers</li><li>swagger servers support (we can add swagger to server with one line of code: <code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">withSwagger def server</code> )</li><li>clients from the same code as servers</li><li>redesign of internal types</li><li>redesign of DSL for routes</li><li>many ergonomic improvements</li><li>packages for extra utils</li><li>split of <code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig</code> package to several packages:<ul style="margin:0px;padding:0px"><li><a href="https://hackage.haskell.org/package/mig" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig</code></a> - core</li><li><a href="https://hackage.haskell.org/package/mig-wai" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig-wai</code></a> - rendering servers to wai apps</li><li><a href="https://hackage.haskell.org/package/mig-client" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig-client</code></a> - clients</li><li><a href="https://hackage.haskell.org/package/mig-extra" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig-extra</code></a> - extra utils</li><li><a href="https://hackage.haskell.org/package/mig-server" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig-server</code></a> - mig servers with batteries</li><li><a href="https://hackage.haskell.org/package/mig-swagger-ui" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig-swagger-ui</code></a> - swagger ui server</li></ul></li><li><a href="https://anton-k.github.io/mig/" style="background-color:transparent;text-decoration-line:none">tutorial and quickstart guide</a> on github pages</li><li>CI for repo with formatter, build and tests and update of docs on github pages</li></ul><p style="font-size:15.008px;font-family:Arial,sans-serif">The internal type for Servers was redesigned so that we assemble the handler function with API description at the same time. In the first release it was just a handler function under the hood.</p><p style="font-size:15.008px;font-family:Arial,sans-serif">As a refresher <a href="https://github.com/anton-k/mig" style="background-color:transparent;text-decoration-line:none"><code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">mig</code></a> is a family of libraries to write lightweight, simple, type-safe and composable servers. It strives to be in the middle ground between scotty and servant. To be composable, flexible and type-safe as servant and simple and lightweight in concepts as scotty.</p><p style="font-size:15.008px;font-family:Arial,sans-serif">One thing that interesting to think about as Server is a first-class value and all servers have the same type and we have just a small number of functions to compose them (they are link server to path and make alternative routes with <code style="font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:1em">Monoid</code>) it’s interesting to explore the possibility of creation small grain-like servers for typical tasks. For example, a server can be a function from interfaces (logging, DB or something else) to server value and we can join them together on various paths. This idea is interesting to consider.</p><p style="font-size:15.008px;font-family:Arial,sans-serif">Thanks to Ambros for contribution. Also I’d like to thank the authors of packages servant, servant-swagger-ui and servant-openapi3 packages for inspiration for my work in this release. Many lines of code are influenced by those packages.</p><p style="font-size:15.008px;font-family:Arial,sans-serif">Links:</p><ul style="margin:1em 0px 1em 1.25em;padding:0px;font-family:Arial,sans-serif;font-size:15.008px"><li><a href="https://github.com/anton-k/mig" style="background-color:transparent;text-decoration-line:none">github</a><br></li><li><a href="https://anton-k.github.io/mig/" style="background-color:transparent;text-decoration-line:none">tutorial</a></li><li><a href="https://hackage.haskell.org/package/mig" style="background-color:transparent;text-decoration-line:none">mig on hackage</a> also see packages <a href="https://hackage.haskell.org/package/mig-server" style="background-color:transparent;text-decoration-line:none">mig-server</a> and <a href="https://hackage.haskell.org/package/mig-client" style="background-color:transparent;text-decoration-line:none">mig-client</a>.</li><li><a href="https://github.com/anton-k/mig/tree/main/examples/mig-example-apps" class="gmail-diff-ins" style="text-decoration-line:none"><ins style="text-decoration-line:none">examples</ins></a><br><br>Cheers, Anton<br></li></ul></div>