Fp ts 我可以用“Applicative”替换对“.map”的重复调用吗`

Fp ts 我可以用“Applicative”替换对“.map”的重复调用吗`,fp-ts,Fp Ts,我有以下代码: typeascale={head:[1];tail:B}{head:[1,1];tail:B}; B型天平= |{头:[2];尾:C} |{头:[2,3];尾:C} |{头:[3];尾:A}; 类型CScale=A | B | null; 类型A={tag:“A”;比例:AScale}; 类型B={标记:“B”;刻度:BScale}; 类型C={tag:“C”;scale:CScale}; 函数AScales(len:number):A[]{ 如果(len({head:[1],t

我有以下代码:

typeascale={head:[1];tail:B}{head:[1,1];tail:B};
B型天平=
|{头:[2];尾:C}
|{头:[2,3];尾:C}
|{头:[3];尾:A};
类型CScale=A | B | null;
类型A={tag:“A”;比例:AScale};
类型B={标记:“B”;刻度:BScale};
类型C={tag:“C”;scale:CScale};
函数AScales(len:number):A[]{
如果(len({head:[1],tail:b})),
图((b:b)=>({head:[1,1],tail:b})),
]).map((a:AScale)=>({标记:“a”,比例:a}));
}
功能BScales(len:number):B[]{
如果(len({head:[3],tail:a})),
CScales(len-2).map((c:c)=>({head:[2],tail:c})),
CScales(len-5).map((c:c)=>({head:[2,3],tail:c})),
]).map((b:BScale)=>({标记:“b”,比例:b}));
}
函数CScales(len:number):C[]{
if(len<0){
返回[];
}else if(len==0){
返回[{标记:“C”,刻度:null}];
}否则{
返回扁平化([Ascale(len),BScale(len)]).map((c:CScale)=>({
标签:“C”,
比例:c,
}));
}
}
我想知道fp ts包中是否有工具可以整理这段代码。特别是,从Haskell的背景来看,似乎应该有某种方法可以使用与应用程序类型等效的fp ts来摆脱对
.map
的一些调用。谢谢