docs/archive/2026-07-ai-artifacts/claude-skills/neohaskell-implementer/SKILL.md
> **ARCHIVAL KNOWLEDGE — DO NOT USE OR REFERENCE.** > Superseded by `codemap/` + root `AGENTS.md`. Scheduled for deletion once the pipeline is verified (Phase 6). > Manifest: `docs/archive/2026-07-ai-artifacts/MANIFEST.md` --- name: neohaskell-implementer description: NeoHaskell code implementation guide. Use when implementing features, writing tests, build/test loops, or any task requiring NeoHaskell code. Handles pipeline phases 7-9 (tests, implementation, build loop), 12-13 (fix reviews, fin
npx skillsauth add neohaskell/neohaskell docs/archive/2026-07-ai-artifacts/claude-skills/neohaskell-implementerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ARCHIVAL KNOWLEDGE — DO NOT USE OR REFERENCE. Superseded by
codemap/+ rootAGENTS.md. Scheduled for deletion once the pipeline is verified (Phase 6). Manifest:docs/archive/2026-07-ai-artifacts/MANIFEST.md
You are implementing code for the NeoHaskell project. Every line of code must follow NeoHaskell conventions exactly. Your code must be indistinguishable from what the project maintainer would write.
_ wildcard params, let..in/where, $, <>/++, raw String/IO/Either). Scoped strictly to files the change already opens; the rule never asks for a repo-wide reformat. Test bodies/assertions remain immutable when an immutability rule is in force; the rule applies to surrounding helpers, imports, and fixtures only.Before writing any helper function:
Core.hs re-exports| # | Rule | Correct | Wrong |
|---|------|---------|-------|
| 1 | Pipe operator | x \|> foo \|> bar | bar $ foo x |
| 2 | Do-blocks for bindings | do let y = expr | let y = expr in ... |
| 3 | Case expressions only | case x of { ... } | Pattern matching in function head |
| 4 | Descriptive type params | forall element result. | forall a b. |
| 5 | Qualified imports | import Module qualified | Unqualified imports |
| 6 | String interpolation | [fmt\|Hello #{name}!\|] | "Hello " <> name |
| 7 | Result, not Either | Result error value | Either error value |
| 8 | Task, not IO | Task err val | IO a |
| 9 | Task.yield | Task.yield value | pure / return |
| 10 | If-then-else for Bools | if cond then a else b | case cond of True -> ... |
-- Type unqualified, module qualified
import Array (Array)
import Array qualified
import Result (Result (..))
import Result qualified
-- GHC/base modules: qualified with full path
import Data.Text qualified
import Data.Aeson qualified as Json
spec :: Spec Unit
spec = do
describe "ModuleName" do
describe "functionName" do
it "describes expected behavior" \_ -> do
input |> ModuleName.functionName |> shouldBe expected
{-# INLINE fn #-} on small, hot-path functions{-# UNPACK #-} on primitive fields in hot-path typestoEncoding over toJSON for Aeson on hot pathsnhcore.cabalcabal build allcabal build allnhcore.cabalcabal build allcabal testhlint on changed filesMaximum 10 iterations.
After 10 iterations with failures:
Before reporting completion:
$ operator (use |>)let..in or where (use do)case)pure or return (use Task.yield)Either (use Result)[fmt|...|])cabal build all && cabal test after all fixesgh api repos/neohaskell/NeoHaskell/pulls/{PR}/commentscabal build all && cabal testdata MyCommand = MyCommand
{ entityId :: Uuid
, someField :: Text
}
deriving (Eq, Show, Generic)
instance Json.ToJSON MyCommand
instance Json.FromJSON MyCommand
-- TH macro (define endpoint handlers BEFORE this)
command "MyCommand" ''MyCommand ''MyEntity
[ 'someEndpoint
]
decide :: MyCommand -> Maybe MyEntity -> RequestContext -> Decision MyEvent
decide cmd entity _ctx =
case entity of
Just _ -> Decider.reject "Entity already exists"
Nothing -> Decider.acceptNew [MyEventCreated {entityId = cmd.entityId}]
data MyEntity = MyEntity
{ entityId :: !Uuid
, someField :: !Text
}
deriving (Eq, Show, Generic)
data MyEvent
= MyEventCreated { entityId :: Uuid }
| MyEventUpdated { someField :: Text }
deriving (Eq, Show, Generic)
-- Type families
type instance EntityOf MyCommand = MyEntity
type instance EventOf MyEntity = MyEvent
$ — use |>let..in or where — use doEither — use Resultpure or returnPrelude directlydevelopment
> **ARCHIVAL KNOWLEDGE — DO NOT USE OR REFERENCE.** > Superseded by `codemap/` + root `AGENTS.md`. Scheduled for deletion once the pipeline is verified (Phase 6). > Manifest: `docs/archive/2026-07-ai-artifacts/MANIFEST.md` --- name: neohaskell-style-guide description: NeoHaskell coding style reference and enforcement rules. Load when writing, reviewing, or modifying any Haskell code in the NeoHaskell project. Triggers on 'NeoHaskell style', 'NeoHaskell conventions', 'how to write NeoHaskell', '
development
> **ARCHIVAL KNOWLEDGE — DO NOT USE OR REFERENCE.** > Superseded by `codemap/` + root `AGENTS.md`. Scheduled for deletion once the pipeline is verified (Phase 6). > Manifest: `docs/archive/2026-07-ai-artifacts/MANIFEST.md` --- name: neohaskell-security-review description: Security & Code Quality review for NeoHaskell. Use when reviewing code changes, PRs, or architectural decisions for security implications. Evaluates OWASP, NIST, EU compliance. Handles pipeline phases 2 (ADR review) and 10 (im
development
> **ARCHIVAL KNOWLEDGE — DO NOT USE OR REFERENCE.** > Superseded by `codemap/` + root `AGENTS.md`. Scheduled for deletion once the pipeline is verified (Phase 6). > Manifest: `docs/archive/2026-07-ai-artifacts/MANIFEST.md` --- name: neohaskell-qa-designer description: Testing QA Designer for NeoHaskell. Designs comprehensive test specifications with exhaustive edge cases, boundary conditions, and happy paths BEFORE implementation. Handles pipeline phase 6 (Test Spec Design). Outside-in TDD meth
development
> **ARCHIVAL KNOWLEDGE — DO NOT USE OR REFERENCE.** > Superseded by `codemap/` + root `AGENTS.md`. Scheduled for deletion once the pipeline is verified (Phase 6). > Manifest: `docs/archive/2026-07-ai-artifacts/MANIFEST.md` --- name: neohaskell-performance-review description: Performance review for NeoHaskell targeting 50k req/s throughput. Use when reviewing code for performance implications, INLINE pragmas, strictness, and allocation patterns. Handles pipeline phases 3 (ADR review) and 11 (imp