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'