0

私はこれらの声明を持っています:

data SL a = SR (Integer -> (a, Integer))
    deriving(Show)

instance Monad SL where
    return k = SR (\st -> (k, st))

xx::SL Integer
xx = return 4

それから私は:

let SR f = xx

今私が持っています:

xx :: SL Integer
f :: Integer -> (Integer, Integer)

しかし、私はその理由を理解できません。の構文上の意味を見逃しているのかもしれませんlet DATACONSTRUCTOR ..

手伝ってくれますか?

4

2 に答える 2

8

let SR f = xxSR fに等しい必要があることを意味しxxます。それで、

SR f = xx                   -- let
     = return 4             -- def. xx
     = SR (\st -> (4, st))  -- def. return

したがって

f = \st -> (4, st)  -- remove SR on both sides

これは、このコンテキストでは、とのためにタイプされInteger -> (Integer, Integer)ます。SR :: a -> Integer -> (a, Integer)xx :: SL Integer

于 2012-06-06T09:59:47.833 に答える