Pular para o conteúdo
Skillpedia
Código em geral48 mil · #3034

fp-taskeither-ref

Faz seu agente dar referências rápidas sobre TaskEither. É útil para lidar com erros em operações assíncronas.

O que ela faz

TaskEither é uma forma de lidar com operações assíncronas (que levam tempo para acontecer) que podem dar errado. Ele garante que os erros sejam tratados de forma clara e organizada.

Quando usar

  • ✓Ao fazer chamadas para APIs externas que podem falhar.
  • ✓Ao trabalhar com Promises que precisam de tratamento de erro explícito.
  • ✓Ao construir sequências de operações assíncronas onde cada passo pode gerar um erro.

Exemplo do que pedir para a IA

“Como posso usar TaskEither para buscar dados de um usuário e garantir que erros de rede ou de formato sejam tratados?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/fp-taskeither-ref/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/fp-taskeither-ref/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele funciona como uma promessa que, em vez de apenas ter sucesso ou falhar, retorna um resultado que pode ser um sucesso (com dados) ou um erro específico. Você pode encadear operações, transformando sucessos ou recuperando de erros.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill fp-taskeither-ref

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/fp-taskeither-ref/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Referência Rápida de TaskEither

TaskEither = operação assíncrona que pode falhar. Sua forma é () => Promise<Either<E, A>>: a construção é preguiçosa.

Quando Usar

  • Você precisa de uma referência rápida de fp-ts para operações assíncronas que podem falhar.
  • A tarefa envolve chamadas de API, encapsulamento de Promise, ou composição de pipelines assíncronos de tratamento de erros.
  • Você quer uma folha de cola concisa para operadores e padrões TaskEither.

Criar

import * as TE from 'fp-ts/TaskEither'
import * as T from 'fp-ts/Task'

TE.right(value)          // Async success
TE.left(error)           // Async failure
TE.tryCatch(asyncFn, toError)  // Promise → TaskEither
TE.fromEither(either)    // Either → TaskEither

Transformar

TE.map(fn)               // Transform success value
TE.mapLeft(fn)           // Transform error
TE.flatMap(fn)           // Chain (fn returns TaskEither)
TE.orElse(fn)            // Recover from error

Executar

// TaskEither is lazy - must call () to run
const result = await myTaskEither()  // Either<E, A>

// Or pattern match
await pipe(
  myTaskEither,
  TE.match(
    (err) => console.error(err),
    (val) => console.log(val)
  )
)()

Padrões Comuns

import { pipe } from 'fp-ts/function'
import * as TE from 'fp-ts/TaskEither'
import * as T from 'fp-ts/Task'

// Wrap fetch
const fetchUser = (id: string, signal: AbortSignal) => TE.tryCatch(
  async () => {
    const response = await fetch(`/api/users/${encodeURIComponent(id)}`, { signal })
    if (!response.ok) throw new Error(`HTTP ${response.status}`)
    const body: unknown = await response.json()
    return validateUser(body) // Application schema validator; throws on invalid data
  },
  (e) => ({ type: 'NETWORK_ERROR', message: String(e) })
)

// Chain async calls
pipe(
  fetchUser('123', signal),
  TE.flatMap(user => fetchPosts(user.id)),
  TE.map(posts => posts.length)
)

// Parallel calls
import { sequenceT } from 'fp-ts/Apply'
sequenceT(TE.ApplyPar)(
  fetchUser('1', signal),
  fetchPosts('1'),
  fetchComments('1')
)

// With recovery
pipe(
  fetchUser('123', signal),
  TE.orElse(() => TE.right(defaultUser)),
  TE.getOrElse(() => T.of(defaultUser))
)

vs async/await

// ❌ async/await - errors hidden
async function getUser(id: string) {
  try {
    const res = await fetch(`/api/users/${id}`)
    return await res.json()
  } catch (e) {
    return null  // Error info lost
  }
}

// ✅ TaskEither - errors typed and composable
const getUser = (id: string, signal: AbortSignal) => pipe(
  TE.tryCatch(() => fetch(`/api/users/${encodeURIComponent(id)}`, { signal }), toNetworkError),
  TE.flatMap(res => TE.tryCatch(async () => {
    if (!res.ok) throw new Error(`HTTP ${res.status}`)
    return validateUser(await res.json())
  }, toParseError))
)

Use TaskEither quando você precisar de erros tipados para operações assíncronas.

Limitações

  • Use esta habilidade apenas quando a tarefa corresponder claramente ao escopo descrito acima.
  • Não trate a saída como substituta para validação específica do ambiente, testes ou revisão de especialistas.
  • Pare e peça esclarecimentos se faltarem entradas necessárias, permissões, limites de segurança ou critérios de sucesso.

Escopo de Referência

Estes são fragmentos de fp-ts 2.x. Forneça variáveis de aplicação, tipos, validadores e importações, e verifique a versão instalada. map não captura exceções lançadas. Task não tem um canal de erro tipado; uma promise incorretamente encapsulada ainda pode rejeitar. Use tryCatch em limites falíveis.

Forneça um timeout/sinal de abortamento de propriedade do chamador e valide esquemas de resposta. Chamadas de aplicação paralelas precisam de concorrência limitada e autorização para seus dados, custos e efeitos; ApplyPar não cancela o trabalho automaticamente em caso de falha. Callbacks de erro devem redigir segredos e payloads privados.

API Oficial: Módulos fp-ts.

Perguntas frequentes

O que significa 'construção é lazy'?

Significa que a operação só é executada quando você explicitamente a chama, não no momento em que a define.

Qual a diferença entre `map` e `flatMap`?

`map` transforma o valor de sucesso, mas o resultado ainda é um TaskEither. `flatMap` encadeia operações, onde a função passada também retorna um TaskEither, permitindo sequências mais complexas.

Como eu executo a operação?

Você precisa chamar a função definida (ela retorna uma Promise) e usar `await` para obter o resultado, que será um `Either` (sucesso ou erro).

Detalhes

Descrição original do autor

Quick reference for TaskEither. Use when user needs async error handling, API calls, or Promise-based operations that can fail.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#3034
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas