我的目標是編寫採用一些多態值的函數,並使用typereps表示具體類型的列表。它返回具有相同值的新列表,但已經轉換爲通過typereps指定的具體類型。如何通過'TypeRep'指定值的類型?
讓我們有這樣的值列表:["one", "two"]
與-XOverloadedStrings
啓用。
分別是,每個的類型是IsString a => a
。
列表中,我們可以得到在這樣的方式:
import Data.Typeable (Proxy(..), typeRep)
import Data.Text (Text)
[typeRep (Proxy :: Proxy String), typeRep (Proxy :: Proxy ByteString)]
有沒有什麼辦法讓String
類型的"one"
和ByteString
型"two"
?
P.S.根據含有不同類型的值列表防止錯誤,我們可以在Dynamic.
包的每個值,如下面的例子(僞):
{-# LANGUAGE ParallelListComp #-}
import Data.Dynamic (toDyn)
[ toDyn (val :: type') | val <- vals | type' <- concreteTypes ]
它可以使用模板哈斯克爾來完成,但是這將是太醜陋。
結果列表的類型是什麼?像這樣的東西很可能使用新的反射機器,但你至少需要返回一個HList。 – Alec
列表只能由* 1 *類型的元素組成。 –
@WillemVanOnsem編輯。 – errfrom