我注意到我通常构建使用镜头获取值的函数,将一些函数应用于值并返回结果.例如,将一对元素相加
\pair -> (pair ^. _1) + (pair ^. _2)
我觉得应该有一些组合器来组合getters第一类并返回另一个getter(可能是类型(b -> c -> d) -> Getter a b -> Getter a c -> Getter a d).有帮助吗?
我正在Haskell中探索类型系列,试图确定我可以定义的类型级函数的复杂性.我想定义一个封闭的类型级版本mod,如下所示:
{-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, UndecidableInstances #-}
import GHC.TypeLits
type family Mod (m :: Nat) (n :: Nat) :: Nat where
n <= m => Mod m n = Mod (m - n) n
Mod m n = m
Run Code Online (Sandbox Code Playgroud)
但是,编译器(GHC 7.10.2)拒绝这一点,因为不允许第一个等式中的约束.价值级别的警卫如何转换为类型级别?这在Haskell目前是否可行?