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 有没有办法用乙烯基来实现这一点,或者我应该调整我的代码 使用另一个图书馆?