- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设您声明两个同构
showing :: (Read a, Show a) => Iso' String a
showing = iso read show
reading :: (Read a, Show a) => Iso' a String
reading = iso show read
它们是不安全的,并不是每个字符串都会解析为 a。
这就引出了一个问题:如果 enum = iso fromEnum toEnum
包含在库中,为什么这两个不包含在库中?
它同样不安全,并且类型系统无法阻止。它们都将负担转移到程序员身上,程序员必须确保转换不会破坏同构。
简单示例:在枚举 (+1) True 下
将引发异常
最佳答案
警告:推测性答案如下。
我能想到的两种场景之间的一个区别是,当 toEnum
崩溃时,很容易澄清(引用 the lens docs :“这只是与实际使用的数字范围的同构"),而在读取
方面,事情就有点模糊了。另一个区别是 toEnum
是 Enum
的一种方法(并且是最小实例定义中所需的方法),而 read
不是实际上是一种Read
方法,因此从某种意义上来说,不太重要(事实上,基本文档 explicitly discourage its usage )。
更一般地说,当需要在公开防弹接口(interface)和包含有用但可能不安全或非法的组合器之间进行选择时,lens 通常会选择后者,使它们可供那些人使用谁希望使用它们,同时确认文档中的任何潜在问题(或者,在更复杂的情况下,函数和模块名称中)。鉴于lens是一个非常通用的库,这种方法可以被视为一种非固执己见的选择——在这样的背景下,很难弥补组合器的缺失。
P.S.:还值得注意的是,lens 通过 the _Show
prism 编码 read
和 show
。 _Show
相当于 prism' show readMaybe
,并且对于 Read
值的偏向性是安全的。
关于haskell - 为什么镜头包含用于 fromEnum/toEnum 的 Iso,而不包含用于显示/读取的 Iso?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50671906/
我想编写一个安全版本的 toEnum: safeToEnum :: (Enum t, Bounded t) => Int -> Maybe t 一个简单的实现: safeToEnum :: (Enu
我正在尝试为以下类型编写一个 Enum 实例: -- Type declarations: -- Octave data Octave = O1 | O2 | O3 deriving
我想这样做,但它不起作用。 bool TryGetEnum(TValue value, out TEnum myEnum) { value = default(TEnum); if (
我有以下代码 import Data.List data Card = One | Two | Three | Four
看到函数toEnum . fromEnum用于Char在 HaskellNet.Network.Auth . b64Encode :: String -> String b64Encode = map
假设您声明两个同构 showing :: (Read a, Show a) => Iso' String a showing = iso read show reading :: (Read a, S
我是一名优秀的程序员,十分优秀!