add Haskell skill

This commit is contained in:
Sridhar Ratnakumar 2025-11-04 18:14:49 -05:00
parent 578ae0580a
commit 82f431abf5
2 changed files with 61 additions and 0 deletions

View file

@ -17,8 +17,22 @@ let
(builtins.readFile (commandsDir + "/${fileName}"))
)
(builtins.readDir commandsDir);
skillsDir = ./skills;
skillDirs = lib.filterAttrs (_: type: type == "directory") (builtins.readDir skillsDir);
in
{
# Link skill directories to ~/.claude/skills/
# (home-manager module doesn't support skills yet, so we link manually)
home.file = lib.mapAttrs'
(skillName: _:
lib.nameValuePair ".claude/skills/${skillName}" {
source = skillsDir + "/${skillName}";
recursive = true;
}
)
skillDirs;
home.packages = [
pkgs.tree
pkgs.python313Packages.markitdown

View file

@ -0,0 +1,47 @@
---
name: haskell
description: Expert Haskell development assistance. Use when working with Haskell code, .hs files, Cabal, ghcid, or when user mentions Haskell, functional programming, or type-level programming.
---
# Haskell Development
Expert assistance for Haskell programming.
## Guidelines
**CRITICAL - Error Handling in Code**: NEVER write code that silently ignores errors:
- Do NOT use `undefined` or `error` as placeholders
- Do NOT skip handling error cases in pattern matches
- Do NOT ignore `Maybe`/`Either` failure cases
- Handle all possible cases explicitly
- Use types to make impossible states unrepresentable
Every error case in generated code must be handled properly.
**Code Quality**:
- Write type signatures for all top-level definitions
- Write total functions (avoid `head`, `tail`, `!!`)
- Prefer pure functions over IO when possible
- Use explicit exports in modules
- Leverage type system for safety
- Favor composition over complex functions
- Write Haddock documentation for public APIs
**Idiomatic Patterns**:
- Prefer `Text` over `String`
- Use `newtype` wrappers for domain types
- Apply smart constructors for validation
- Use lenses for record manipulation when appropriate
- Use `Applicative` and `Monad` appropriately
## Testing
- Use QuickCheck for property-based testing
- Use HUnit or Hspec for unit tests
- Provide good examples in documentation
## Build instructions
As you make code changes, start a subagent in parallel to resolve any compile errors in `ghcid.log`.
**IMPORTANT**: Do not run build commands yourself. The human runs ghcid on the terminal, which then updates `ghcid.log` with any compile error or warning (if this file does not exist, or if ghcid has stopped, remind the human to address it). You should read `ghcid.log` (in _entirety_) after making code changes; this file updates near-instantly. Don't rely on VSCode diagnostics.