构造方法技巧
HousePosition (houseBuilding form) (houseFloor form)如何使用monad简写
1 | -- HousePosition :: Text -> Int -> HousePosition |
functor和Applicative
通过<$>和<*>进行简写,所以先了解函数的functor和applicative实现
functor于Applicative的签名如下
1 | class Functor f where |
根据以上公式,函数的Functor和Applicative分别是
1 | -- f1 <$> f2 |
推导
处理HousePosition houseBuilding的关系
HousePosition: Text -> (Text -> HousePosition )houseBuilding: Form -> Text
houseBuilding的结果Text可以作为HousePosition的参数Text
所以,将HousePosition函数应用于houseBuilding的结果
得到HousePosition <$> houseBuilding
1 | Text -> Text -> HousePosition |
处理(HousePosition <$> houseBuilding)与houseFloor的关系
(HousePosition <$> houseBuilding): Form -> Int -> HousePositionhouseFloor: Form -> Int
houseFloor的结果可以作为(HousePosition <$> houseBuilding)的第二个参数
所以,将(HousePosition <$> houseBuilding)函数去掉第一个参数后应用于houseBuilding的结果
得到HousePosition <*> houseBuilding
1 | -- 去掉第一个参数得到 Int -> HousePosition |
提升
其实就是一个提升操作,原先的构造函数是Text -> Int -> HousePosition,经过提升后变成Form -> HousePosition