S.min ('1') ('02') =>'02'
为什么这甚至可能?(是的,类型强制...但这是 Sanctuary)可以配置 Sanctuary 以便在使用字符串时不返回任何内容吗?有没有一种优雅的方法来处理这个问题?
S.min ('1') ('02') =>'02'
为什么这甚至可能?(是的,类型强制...但这是 Sanctuary)可以配置 Sanctuary 以便在使用字符串时不返回任何内容吗?有没有一种优雅的方法来处理这个问题?
让我们考虑以下类型S.min
:
min :: Ord a => a -> a -> a
String
满足 Ord 的要求,因此String -> String -> String
是一种可能的专业化:
> S.min ('foo') ('bar')
'bar'
如果您正在处理应该是数字但可能不是数字的输入,最好的方法是预先处理不确定性:
// untrustedInput1 :: Any
// untrustedInput2 :: Any
// input1 :: Maybe Number
const input1 = S.filter (S.is ($.Number)) (S.Just (untrustedInput1));
// input2 :: Maybe Number
const input2 = S.filter (S.is ($.Number)) (S.Just (untrustedInput2));
然后,您可以使用S.lift2
转换S.min
为可以对Maybe Number
值进行操作的函数:
S.lift2 (S.min) :: (Apply f, Ord a) => f a -> f a -> f a
上面的签名可以像这样专门化:
S.lift2 (S.min) :: Maybe Number -> Maybe Number -> Maybe Number
最后一步是应用于S.lift2 (S.min)
可信输入:
S.lift2 (S.min) (input1) (input2)
这是一个完整的工作示例:
> S.lift2 (S.min)
. (S.filter (S.is ($.Number)) (S.Just ('1')))
. (S.filter (S.is ($.Number)) (S.Just ('02')))
Nothing