From haskell-claude
Relude conventions and safe patterns. Use when setting up relude, migrating from Prelude, or working with relude-based projects.
How this skill is triggered — by the user, by Claude, or both
Slash command
/haskell-claude:haskell-reludeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use cabal mixins for project-wide adoption (preferred over NoImplicitPrelude):
Use cabal mixins for project-wide adoption (preferred over NoImplicitPrelude):
build-depends: base >= 4.14 && < 5, relude >= 1.2 && < 1.3
mixins: base hiding (Prelude)
, relude (Relude as Prelude)
, relude
String except for legacy interopviaNonEmpty to safely bridge from listsreadMaybe/readEither -- never readordNub/hashNub -- never nub (O(n^2))Set.member/HashMap.member -- never elem on Set/HashSet (compile error in relude)whenM/unlessM -- for monadic conditionalsone -- for singleton container constructionnewIORef, readIORef, etc. directly (no liftIO wrapper needed)encodeUtf8 / decodeUtf8 -- Text <-> ByteStringtoText / toLText / toString -- between string typestoStrict / toLazy -- strict <-> lazy TextString when Text is availablehead/tail on [a] instead of NonEmpty or viaNonEmptyliftIO . readIORef instead of lifted readIORefPrelude alongside Reludetrace calls in production codeFor migration guide and complete examples:
references/relude-migration.mdnpx claudepluginhub birdgg/haskell-plugin --plugin haskell-claudeGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.