SKS = I
型が一致しないので、Data.Dynamicを使ってみる。
import Data.Dynamic s = toDyn s' where s' :: Dynamic -> Dynamic -> Dynamic -> Dynamic s' f g x = (f # x) # (g # x) k = toDyn k' where k' :: Dynamic -> Dynamic -> Dynamic k' x y = x infixl 3 # (#) :: Dynamic -> Dynamic -> Dynamic f # x = fromDyn r r where r = dynApp f (toDyn x)
*Main> fromDynamic $ s # k # k # (toDyn 'a') :: Maybe Char Just 'a' *Main> fromDynamic $ s # k # s # (toDyn 'a') :: Maybe Char Just 'a'