2

http://hackage.haskell.org/package/vinyl提供的可扩展记录与其他库(HList 和可能的其他库,如葡萄柚记录/记录)提供的不同。这是因为查找的结果是基于 pair (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 有没有办法使用乙烯基来实现这一点,或者我应该调整我的代码以使用另一个库?

4

1 回答 1

1

乙烯基可能会更改为仅基于标签进行查找。与此同时,我已将 Rlang-QQ 更改为使用 HList。

于 2013-09-11T22:24:20.027 回答