purescript - 如何在纯脚本中使用镜头在 ADT 之间进行转换?
问题描述
这是代码是我想要完成的工作但简化的示例。我想从一种类型的包装记录映射到另一种:
import Prelude
import Data.Lens
import Data.String as String
newtype AsString = AsString { names :: Array String }
newtype AsSize = AsSize { names :: Array Int }
_names = lens _.names (_ { names = _ })
to_sizes :: AsString -> AsSize
to_sizes (AsString s) = AsSize $ over (_names <<< traversed) String.length s
我如何只对镜头做同样的事情而不先打开记录?
当使用像lens (\(AsString s) -> s) (const AsString)
原始类型这样的镜头时,我猜它期望结果是原始类型?
解决方案
我想我通过实验找到了答案:
import Prelude
import Data.Lens
import Data.String as String
newtype AsString = AsString { names :: Array String }
newtype AsSize = AsSize { names :: Array Int }
_ToSize = lens (\(AsString s) -> s) (const AsSize)
_names = lens _.names (_ { names = _ })
to_sizes :: AsString -> AsSize
to_sizes s = over (_ToSize <<< _names <<< traversed) String.length s
似乎将(const AsSize)
原始记录“镜像”到新类型中。
推荐阅读
- flutter - 定位文本小部件,使小部件的中心位于父堆栈的特定位置
- ms-access - 文本字段中的 MS 访问变量
- powershell - 获取网络适配器的 IP 并显示在消息框中...连接不活动时出现错误
- ios - ScrollView 中的 SwiftUI NavigationLink 在滚动之前没有响应
- r - tryCatch 错误处理在闪亮的应用程序中不起作用?
- python - 不同频率时间序列的布尔掩码
- ddev - 启动 DDEV-Local 项目时出现“发现孤儿容器”
- c++ - 程序进入无限循环,但如果删除一些函数或行,它可以工作
- python-3.x - 通过在特定日期范围之间插入其他列来在数据框中创建新列 - Pandas
- mysql - mySQL Left Join 多个值(REPLACE AND SUBSTRING_INDEX FUNCTION 失败)