根据所选镜头/索引缩小唱片类型

时间:2013-08-26 03:58:05

标签: haskell

http://hackage.haskell.org/package/vinyl提供的可扩展记录与其他库不同 (HList和其他可能像葡萄柚记录/记录)提供。这是因为查找结果基于(result type, label)对,而其他库仅基于label进行查找。乙烯基发生这种情况的一个例子:

{-# LANGUAGE DataKinds, TypeOperators #-}
import Data.Vinyl
r = fixRecord $ (Field :: "x" ::: a) =: (3::Double)
        <+> (Field :: "x" ::: a) =: (2::Int)
main = do
    print $ rGet (Field :: "x" ::: Int) r
    print $ rGet (Field :: "x" ::: Double) r
-- prints 2\n3

对于我的应用程序http://hackage.haskell.org/package/Rlang-QQ,类型 记录的元素将在以后使用, 所以我似乎需要“x”来唯一地确定它的值 存储在那里。

我想避免在表达式

中使用“冗余”类型签名
(rGet (Field :: "z" ::: [Double])
    (ans :: PlainRec ("z" ::: [Double] ': '[])))

让它看起来更像:

(rGet (Field :: "z" ::: [Double]) ans)

整个代码在http://code.haskell.org/~aavogt/Rlang-QQ/examples/test2.hs 有没有办法用乙烯基来实现这一点,或者我应该调整我的代码 使用另一个图书馆?

1 个答案:

答案 0 :(得分:1)

乙烯基可能changed只能根据标签进行查找。与此同时,我改变了Rlang-QQ使用HList。