簡體   English   中英

Haskell:類型與模式匹配

[英]Haskell: type versus pattern matching

我是二年級的本科生,剛剛開始學習Haskell。 我的問題是關於類型處理與模式匹配。 我已經定義了一個包含不同參數和規格的汽車類型,如果汽車的變速箱是一個搖桿或自動變速箱,如下所示:

data Car = Stick [Char] Integer | Automatic [Char] Integer

到目前為止,這個解決方案對於模式匹配汽車非常出色,但現在我需要一個功能,它將汽車作為輸入並返回Stick / Automatic信息,並且不希望將Stick / Automatic處理更改為string-處理。 我不知道為該函數指定什么返回類型。 返回類型會是什么?

您可以為傳輸類型引入一種新類型:

data TransmissionType = Stick | Automatic

並將您的汽車定義更改為:

data Car = Car TransmissionType [Char] Integer

然后,您可以添加一個函數來獲取類型

transmissionType :: Car -> TransmissionType
transmissionType (Car t _ _) = t

由於您只有一個構造函數,因此您可以使用記錄:

data Car = Car {
    transmissionType :: TransmissionType,
    field1 :: [Char],
    field2 :: Integer
}

如果您不想更改定義,可以添加一個功能

isManual :: Car -> Bool
isManual (Stick _ _) = True
isManual (Automatic _ _) = False

在Haskell中,您在代碼中(在聲明中)編寫的返回類型不適用於編譯器。 這是給你的。 編譯器會計算出你的函數是什么類型,然后檢查你是否正確。

我建議你做的是制作你需要的功能。 (我還沒弄清楚應該是什么。)完成后,打開ghci(編譯器,交互式),加載你的代碼。 然后使用:t讓編譯器弄清楚它是什么類型。 如果你願意,你可以在聲明中寫出來。 沒有必要。

$ ghci
prelude> :load yourfile
prelude> :t yourfunction

暫無
暫無

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

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