Haskell(GHC)のSymbol/Natカインドの型を値に落とす方法

 Haskell(GHC)では以下のように、文字列を型として埋め込むことができます。

{-# LANGUAGE DataKinds #-}

type Str = "sugar"

main :: IO ()
main = return ()

 こうすれば値"sugar" :: Stringを取得できます。

{-# LANGUAGE DataKinds #-}

import Data.Proxy (Proxy(..))
import GHC.TypeLits (Symbol, symbolVal)

type Str = "sugar"

main :: IO ()
main = putStrLn $ symbolVal (Proxy :: Proxy Str)
-- {output}
-- sugar

Nat

 Nat(自然数カインド)も同じことができるよ。

{-# LANGUAGE DataKinds #-}

import Data.Proxy (Proxy(..))
import GHC.TypeLits (Nat, natVal)

main :: IO ()
main = print $ natVal (Proxy :: Proxy 10)
-- {output}
-- 10

参考

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。