これは機能します:
{-# LANGUAGE DataKinds, PolyKinds, KindSignatures, GADTs #-}
import GHC.TypeLits
data F :: Symbol -> * where
F :: F s
unF :: SingI s => F s -> String
unF g = fromSing $ s g where
s :: SingI s => F s -> Sing s
s _ = sing
val :: F "val"
val = F
main = print $ unF val -->> "val"
ネストされた関数なしで unF を書くことはできますか? 私は一般的にこれを「正しく」行っていますか?