簡體   English   中英

Haskell function型

[英]Haskell function type

我現在正在嘗試了解 Haskell function 類型。 假設我想組合兩個函數 f1 和 f2(假設我不知道它們的定義)。 f2 的 function 簽名。 f1 是:

f1 . f2 :: (Fractional (a -> a), Num a) => a -> (a -> a) -> a -> a

我如何閱讀此簽名,更具體地說,我如何知道如何將 arguments 應用於此組合?

例如,我如何讀取 f1 的類型信息。 f2 能夠編寫有效的表達式,例如

(f1 . f2 2) 3 4
(f1 2. f2 2) 4

該簽名意味着您沒有正確組合它們。 您不會收到類型錯誤,因為理論上某些瘋子可能會給函數一個 Num 實例,但在現實生活中這永遠不會發生。 因此,沒有一組 arguments 可以應用於(f1. f2)來進行類型檢查。

相反,備份並查看f1f2的類型。 這些是什么? 我預測它們都是雙參數函數,因為你的類型是我寫的時候得到的類型

:t (/) . (+)
(/) . (+)
  :: (Fractional (a -> a), Num a) => a -> (a -> a) -> a -> a

你不能真正組合一個有兩個參數的 function,因為組合是針對一個參數的函數。 但是,如果您願意,您可以在組合之前部分應用這些函數,以將它們變成單參數函數。 這正是您在上一個示例中所做的,效果很好:

Prelude> f1 = (/)
Prelude> f2 = (+)
Prelude> (f1 2 . f2 2) 4
0.3333333333333333

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM