J'ai trouvé un moyen de convertir un Nat
en un Integer
en utilisant Proxy
et natVal
comme vous pouvez le voir dans le code ci-dessous:Obtenir une liste régulière à partir d'une liste des types
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Data.Proxy (Proxy)
import Data.Monoid ((<>))
import GHC.TypeLits
main :: IO()
main = do
fromNat (undefined :: Proxy 5)
fromNat :: KnownNat n => Proxy n -> IO()
fromNat proxy = do
let (num :: Integer) = natVal proxy -- converting a Nat to an Integer
putStrLn $ "Some num: " <> show num
Mais je ne suis pas en mesure de penser d'une manière simple de convertir une liste de type dans une liste régulière, le code ci-dessous ne tapez même pas vérifier:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Data.Proxy (Proxy)
import Data.Monoid ((<>))
import GHC.TypeLits
main :: IO()
main = do
fromNat (undefined :: Proxy 5)
fromListNat (undefined :: Proxy '[2,3,10])
fromNat :: KnownNat n => Proxy n -> IO()
fromNat proxy = do
let (num :: Integer) = natVal proxy -- converting a Nat to an Integer
putStrLn $ "Some num: " <> show num
fromListNat :: Proxy [Nat] -> IO()
fromListNat = undefined
Comment puis-je convertir une liste de type dans une liste régulière?