[英]what is the meaning of “let x = x in x” and “data Float#” in GHC.Prim in Haskell
[英]What is the meaning of `pure x = (\_ -> x)`?
我正在讀取Applicative的函數實例,並遇到了一行
instance Applicative ((->) r) where
pure x = (\_ -> x)
f <*> g = \x -> f x (g x)
我了解語法,但不了解第二行的含義。
我的理解是:部分應用的函數((->) r)
獲取一個值並將該值包裝到上下文中,該上下文包含始終返回該值的函數。
為什么它不只通過將部分應用的函數應用於該x
來計算結果,然后才將結果存儲在Applicative上下文中?
函數實例的pure
和(<*>)
簽名為
pure :: a -> ((->) r a)
(<*>) :: ((->) r (a -> b)) -> ((->) r a) -> ((->) r b)
將(->)編寫為中綴運算符可得出
pure :: a -> (r -> a)
(<*>) :: (r -> (a -> b)) -> (r -> a) -> (r -> a)
所以pure
是采用類型的參數的函數a
,並返回一個函數,它類型的參數r
並返回類型的值a
。
由於在寫pure
時我們不能知道r
的類型,因此我們只能提供一個返回給pure
的參數的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.