2
我試圖檢查應用型法律保持功能型((->) r)
,這裏是我到目前爲止有:對應用型法律(( - >)R)型
-- Identiy
pure (id) <*> v = v
-- Starting with the LHS
pure (id) <*> v
const id <*> v
(\x -> const id x (g x))
(\x -> id (g x))
(\x -> g x)
g x
v
-- Homomorphism
pure f <*> pure x = pure (f x)
-- Starting with the LHS
pure f <*> pure x
const f <*> const x
(\y -> const f y (const x y))
(\y -> f (x))
(\_ -> f x)
pure (f x)
我有沒有執行前兩個法律的步驟是否正確?
我正在努力與交換&組成法律。對於交流,到目前爲止,我有以下幾點:
-- Interchange
u <*> pure y = pure ($y) <*> u
-- Starting with the LHS
u <*> pure y
u <*> const y
(\x -> g x (const y x))
(\x -> g x y)
-- I'm not sure how to proceed beyond this point.
我希望得到任何幫助的步驟來驗證爲((->) r)
式立交&組成應用性的法律。作爲參考,該組合物合用的法律如下:
pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
謝謝你的提示。當我用g來代替u&v時,它對我的頭很有意義,但現在我想不出爲什麼我選擇這樣做。你自己減少LHS和RHS的建議當然有幫助,而且我能夠解決交換等式。作爲Haskell初學者,在完成之前,我需要花一些時間閱讀Composition lambda。 – Umair
我無法在這裏發佈我對構圖法的嘗試,因爲我無法正確格式化代碼。相反,我發佈了一個新的後續問題:http://stackoverflow.com/questions/34538754/proving-composition-applicative-law-for-r-type – Umair