私は(簡単のためにモナドを使用して回避)非常に単純な継続機能を持っている:入力タイプに基づく継続機能の実装?
:基本的にdata C a = C {unwrap :: (a -> a) -> a}
、私は、入力タイプに基づいて異なる実装を実行する(sudoのコード)に似た何かをしようとしています
data Gadt a where
AString :: String -> Gadt Bool
AInt :: Int -> Gadt Bool
data C a = C {unwrap :: (a -> Gadt a) -> a}
example :: a -> C a
example v = C $ \f -> | (v :: Int) == True = f (AInt v)
| (v :: String) == True = f (AString v)
cont :: Gadt a -> a
cont (AInt v) = ...
cont (AString v) = ...
ここでは基本的な解決策を見落としていますか?私は継続的に新しいので、私は単純なことを見過ごしているかもしれません。
'f :: a - Gadt a'ではないのですが、なぜそれが' AInt v :: Gadt a'や 'AString v :: Gadt a'に作用するのでしょうか? – jakubdaniel