Skip to content

Antonio Ibarra · Haskell Software Engineer

Haskell Software Engineering

I use Haskell for backend development, connecting functional domain models to HTTP routes, SQL persistence, and external APIs. Here is the code and technical reasoning behind my work, alongside my Cardano specialization.

Featured Haskell work: Career Trainer

Career Trainer is a personal web application for storing career goals, organizing learning topics, generating practice questions, and updating progress from answers. Its initial implementation keeps routes, database access, HTML rendering, and the API client in one executable so the full request path is easy to inspect.

The scope is deliberately small. The documented next steps include tests for progress updates and splitting the executable into modules as the boundaries settle.

Backend and web stack

  • Haskell / GHC: explicit records for career goals and generated questions.
  • Scotty over WAI/Warp: HTTP routing for HTML pages, JSON endpoints, and a health check.
  • Lucid2: server-rendered HTML built in Haskell.
  • SQL / SQLite: persisted goals and topics, with answer-driven progress updates through sqlite-simple.
  • OpenAI API: structured question responses decoded into Haskell values, with local fallback questions when credentials or requests fail.

Read the architecture walkthrough and typed API boundary example for the implementation choices.

Engineering approach: types, correctness, and testing

I favor type-driven design that makes data shapes and boundaries visible. A typed record helps organize the domain; it does not by itself prove that a progress calculation or an external response is correct.

For Career Trainer, the next testing priority is the topic progress formula: correct and incorrect answers, repeated updates, and boundary values. The API fallback path also deserves explicit checks. These are testing priorities described in the write-up, not a claim of an existing comprehensive test suite.

Reproducible development with Nix

Career Trainer declares its development environment with Nix flakes. The documented entry points are nix run and nix develop followed by cabal run career-trainer. This gives a reviewer a concrete starting point for building and exploring the application.

The setup walkthrough connects that environment to the development loop.

Selected technical writing

Specialized Cardano and Plutus experience

As a Teacher Assistant at Input Output Global from March 2019 to December 2025, I supported the Plutus Pioneer Program, delivered Cardano and Plutus courses and workshops, and assisted in testing Cardano development tools. This teaching and tooling experience informs how I explain constraints and make technical behavior reviewable.

My Cardano work includes Plutus, Aiken, and eUTxO concepts. The validator review checklist and Aiken and Lean 4 workflow show how I approach invariants and the limits of verification claims.

Review my work or discuss a role

For a Haskell developer role, start with Career Trainer’s source. More work is available on GitHub. To discuss a Haskell backend or Cardano role, email me.