[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CT64DWA3MF24AE2GSS93PM":3,"skill-same:01M6CT64DWA3MF24AE2GSS93PM":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6CT64DWA3MF24AE2GSS93PM","fp-taskeither-ref",null,"Quick reference for TaskEither. Use when user needs async error handling, API calls, or Promise-based operations that can fail.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Ffp-taskeither-ref\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"taskeither","fp taskeither ref","quick reference","error handling","api","user","operations","use","reference","async","error-handling","community","fp-ts","quick-reference","promise","2026-11-10 10:12:30",false,"---\nname: fp-taskeither-ref\ndescription: Quick reference for TaskEither. Use when user needs async error handling, API calls, or Promise-based operations that can fail.\nrisk: unknown\nsource: community\nversion: 1.0.0\ntags: [fp-ts, taskeither, async, promise, error-handling, quick-reference]\n---\n\n# TaskEither Quick Reference\n\nTaskEither = async operation that can fail. Like `Promise\u003CEither\u003CE, A>>`.\n\n## When to Use\n\n- You need a quick fp-ts reference for async operations that can fail.\n- The task involves API calls, Promise wrapping, or composing asynchronous error-handling pipelines.\n- You want a concise cheat sheet for `TaskEither` operators and patterns.\n\n## Create\n\n```typescript\nimport * as TE from 'fp-ts\u002FTaskEither'\n\nTE.right(value)          \u002F\u002F Async success\nTE.left(error)           \u002F\u002F Async failure\nTE.tryCatch(asyncFn, toError)  \u002F\u002F Promise → TaskEither\nTE.fromEither(either)    \u002F\u002F Either → TaskEither\n```\n\n## Transform\n\n```typescript\nTE.map(fn)               \u002F\u002F Transform success value\nTE.mapLeft(fn)           \u002F\u002F Transform error\nTE.flatMap(fn)           \u002F\u002F Chain (fn returns TaskEither)\nTE.orElse(fn)            \u002F\u002F Recover from error\n```\n\n## Execute\n\n```typescript\n\u002F\u002F TaskEither is lazy - must call () to run\nconst result = await myTaskEither()  \u002F\u002F Either\u003CE, A>\n\n\u002F\u002F Or pattern match\nawait pipe(\n  myTaskEither,\n  TE.match(\n    (err) => console.error(err),\n    (val) => console.log(val)\n  )\n)()\n```\n\n## Common Patterns\n\n```typescript\nimport { pipe } from 'fp-ts\u002Ffunction'\nimport * as TE from 'fp-ts\u002FTaskEither'\n\n\u002F\u002F Wrap fetch\nconst fetchUser = (id: string) => TE.tryCatch(\n  () => fetch(`\u002Fapi\u002Fusers\u002F${id}`).then(r => r.json()),\n  (e) => ({ type: 'NETWORK_ERROR', message: String(e) })\n)\n\n\u002F\u002F Chain async calls\npipe(\n  fetchUser('123'),\n  TE.flatMap(user => fetchPosts(user.id)),\n  TE.map(posts => posts.length)\n)\n\n\u002F\u002F Parallel calls\nimport { sequenceT } from 'fp-ts\u002FApply'\nsequenceT(TE.ApplyPar)(\n  fetchUser('1'),\n  fetchPosts('1'),\n  fetchComments('1')\n)\n\n\u002F\u002F With recovery\npipe(\n  fetchUser('123'),\n  TE.orElse(() => TE.right(defaultUser)),\n  TE.getOrElse(() => defaultUser)\n)\n```\n\n## vs async\u002Fawait\n\n```typescript\n\u002F\u002F ❌ async\u002Fawait - errors hidden\nasync function getUser(id: string) {\n  try {\n    const res = await fetch(`\u002Fapi\u002Fusers\u002F${id}`)\n    return await res.json()\n  } catch (e) {\n    return null  \u002F\u002F Error info lost\n  }\n}\n\n\u002F\u002F ✅ TaskEither - errors typed and composable\nconst getUser = (id: string) => pipe(\n  TE.tryCatch(() => fetch(`\u002Fapi\u002Fusers\u002F${id}`), toNetworkError),\n  TE.flatMap(res => TE.tryCatch(() => res.json(), toParseError))\n)\n```\n\nUse TaskEither when you need **typed errors** for async operations.\n","# TaskEither Quick Reference\n\nTaskEither = async operation that can fail. Like `Promise\u003CEither\u003CE, A>>`.\n\n## When to Use\n\n- You need a quick fp-ts reference for async operations that can fail.\n- The task involves API calls, Promise wrapping, or composing asynchronous error-handling pipelines.\n- You want a concise cheat sheet for `TaskEither` operators and patterns.\n\n## Create\n\n```typescript\nimport * as TE from 'fp-ts\u002FTaskEither'\n\nTE.right(value)          \u002F\u002F Async success\nTE.left(error)           \u002F\u002F Async failure\nTE.tryCatch(asyncFn, toError)  \u002F\u002F Promise → TaskEither\nTE.fromEither(either)    \u002F\u002F Either → TaskEither\n```\n\n## Transform\n\n```typescript\nTE.map(fn)               \u002F\u002F Transform success value\nTE.mapLeft(fn)           \u002F\u002F Transform error\nTE.flatMap(fn)           \u002F\u002F Chain (fn returns TaskEither)\nTE.orElse(fn)            \u002F\u002F Recover from error\n```\n\n## Execute\n\n```typescript\n\u002F\u002F TaskEither is lazy - must call () to run\nconst result = await myTaskEither()  \u002F\u002F Either\u003CE, A>\n\n\u002F\u002F Or pattern match\nawait pipe(\n  myTaskEither,\n  TE.match(\n    (err) => console.error(err),\n    (val) => console.log(val)\n  )\n)()\n```\n\n## Common Patterns\n\n```typescript\nimport { pipe } from 'fp-ts\u002Ffunction'\nimport * as TE from 'fp-ts\u002FTaskEither'\n\n\u002F\u002F Wrap fetch\nconst fetchUser = (id: string) => TE.tryCatch(\n  () => fetch(`\u002Fapi\u002Fusers\u002F${id}`).then(r => r.json()),\n  (e) => ({ type: 'NETWORK_ERROR', message: String(e) })\n)\n\n\u002F\u002F Chain async calls\npipe(\n  fetchUser('123'),\n  TE.flatMap(user => fetchPosts(user.id)),\n  TE.map(posts => posts.length)\n)\n\n\u002F\u002F Parallel calls\nimport { sequenceT } from 'fp-ts\u002FApply'\nsequenceT(TE.ApplyPar)(\n  fetchUser('1'),\n  fetchPosts('1'),\n  fetchComments('1')\n)\n\n\u002F\u002F With recovery\npipe(\n  fetchUser('123'),\n  TE.orElse(() => TE.right(defaultUser)),\n  TE.getOrElse(() => defaultUser)\n)\n```\n\n## vs async\u002Fawait\n\n```typescript\n\u002F\u002F ❌ async\u002Fawait - errors hidden\nasync function getUser(id: string) {\n  try {\n    const res = await fetch(`\u002Fapi\u002Fusers\u002F${id}`)\n    return await res.json()\n  } catch (e) {\n    return null  \u002F\u002F Error info lost\n  }\n}\n\n\u002F\u002F ✅ TaskEither - errors typed and composable\nconst getUser = (id: string) => pipe(\n  TE.tryCatch(() => fetch(`\u002Fapi\u002Fusers\u002F${id}`), toNetworkError),\n  TE.flatMap(res => TE.tryCatch(() => res.json(), toParseError))\n)\n```\n\nUse TaskEither when you need **typed errors** for async operations.\n",{"name":5,"risk":39,"tags":40,"source":30,"version":41,"description":7},"unknown",[31,19,28,33,29,32],"1.0.0","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Ffp-taskeither-ref",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill fp-taskeither-ref",{"tool":56,"command":57},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill fp-taskeither-ref",{"tool":59,"command":60},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill fp-taskeither-ref","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Ffp-taskeither-ref\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"_meta.json","REFERENCE","参考文档",486,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Fagent-justice-protocol\u002F_meta.json",[71,84,100,127,146,173],{"skillNo":72,"name":73,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":81,"publishedAt":34},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[82,83],"Test Skill","test",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":34},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[91,92,93,94,95,96,97,30,98,99],"zustand store ts","zustand","store","with","types","middleware","patterns","create","typescript",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":109,"publishedAt":34},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[106],{"categoryNo":107,"categoryName":108,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",[110,111,112,113,114,115,116,117,118,119,120,121,122,123,30,124,125,126],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":134,"publishedAt":34},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[133],{"categoryNo":107,"categoryName":108,"taxonomyType":79,"taxonomyTypeDesc":80},[135,110,136,137,138,139,140,30,115,141,123,142,120,119,114,143,98,144,116,145],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":155,"publishedAt":34},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[152],{"categoryNo":153,"categoryName":154,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000009","前端开发",[156,157,158,159,160,99,161,162,163,164,165,166,94,167,168,169,170,30,171,172],"expert","zod","zod validation expert","validation","react","safe","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":180,"publishedAt":34},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[179],{"categoryNo":107,"categoryName":108,"taxonomyType":79,"taxonomyTypeDesc":80},[181,182,183,184,185,186,187,188,30,189,190,191,192,193,194,195,196,197,198,116],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]