Stateのサンプルコードがわからんです。

tick :: State Int Int
tick = do
n <- get
put (n+1)
return n

plusOne :: Int -> Int
plusOne n = execState tick n

上記のtickのコードで使われているgetについてですが、getって

get = State $ \s -> (s,s)

って定義されてますよね。
じゃあ n <- getのnには
\s -> (s,s)っていう関数が束縛されてるんじゃないでしょうか?
でも次のputでは数値として使われてるから、nは数値なんだろうけど、
どうしてそうなるのかわからないです。