関数型プログラミング言語Haskell Part13
■ このスレッドは過去ログ倉庫に格納されています
0259デフォルトの名無しさん
2010/11/19(金) 22:53:59transの型シグネチャにtが入るように無理矢理にでも変形すればいい
やりかたは複数あるけど、例えば、
{-# LANGUAGE KindSignatures, ScopedTypeVariables #-}
data Wrap (t :: * -> *) = Wrap
trans :: forall a t. Trans t => Wrap t -> [a] -> [a]
trans _ = toList . (fromList :: [a] -> t a)
として、trans (Wrap :: Wrap T1) x yみたいに使う
ちょっとトリックを弄すれば言語拡張なしでも書ける
data (Trans t) => Wrap1 t = Wrap1
trans1 :: Trans t => Wrap1 t -> [a] -> [a]
trans1 w = toList . f w . fromList
where
f :: Wrap1 x -> x b -> x b
f _ = id
■ このスレッドは過去ログ倉庫に格納されています