我想我是瞎子什么的,所以我找不到對 Data.Text 常量進行模式匹配的慣用方法。
基本上,我想做的是以下幾點:
getTempDriverName dir >>= \case
"k10temp" -> handleK10Temp dir
"coretemp.0" -> handleCoreTemp dir
_ -> fail "Wrong driver"
我想使用Data.Text,因為String它很懶惰,沒有人知道檔案何時會關閉。但是,顯然以下方法不起作用:
getTempDriverName dir >>= \case
T.pack "k10temp" -> handleK10Temp dir
T.pack "coretemp.0" -> handleCoreTemp dir
_ -> fail "Wrong driver"
有任何想法嗎?慣用的方式是什么?我當然可以這樣做:
getTempDriverName dir >>= \case
name
| name == T.pack "k10temp" -> handleK10Temp dir
| name == T.pack "coretemp.0" -> handleCoreTemp dir
| otherwise -> fail "Wrong driver"
但它涉及系結一個我不喜歡的名字。
uj5u.com熱心網友回復:
如果你真的想在這里進行模式匹配,你可以使用OverloadedStrings擴展名,因為Text它是IsString. 有了這個擴展,字串就有了 type IsString a => a,就像數字有 type 一樣Num a => a:
λ> :set -XOverloadedStrings
λ> :t "hello"
"hello" :: IsString a => a
λ> "sample" :: Text
"sample"
在代碼中:
-- put this pragma at the top of the file
{-# LANGUAGE OverloadedStrings #-}
getTempDriverName dir >>= \case
"k10temp" -> handleK10Temp dir
"coretemp.0" -> handleCoreTemp dir
_ -> fail "Wrong driver"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/475116.html
