我的代碼目前是這樣的:
type Speed = Float
type Height = Float
type FuelMass = Float
type Gravity = Float
有沒有辦法通過分組宣告來不浪費太多空間,比如
type (Speed, Height, FuelMass, Gravity) = Float
uj5u.com熱心網友回復:
不,型別定義是它自己的宣告。如果你真的想要,你可以通過用分號而不是換行符將它們分組在同一行,但這將是一種非常非常不尋常的風格。
uj5u.com熱心網友回復:
好吧,你當然可以讓 Template Haskell 為你生成任何代碼。
module MultiDefinitions where
import Language.Haskell.TH
import Control.Monad
multipleTypeSynonyms :: [Q Name] -> Q Type -> DecsQ
multipleTypeSynonyms synGs tG = do
t <- tG
forM synGs $ \synG -> do
syn <- synG
return $ TySynD syn [] t
然后
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH
import MultiDefinitions
multipleTypeSynonyms
(newName <$> ["Speed", "Height", "FuelMass", "Gravity"]) [t| Float |]
將生成您手動撰寫的相同定義。
用 TH 處理這樣的事情是個好主意嗎?幾乎不。事實上,也不清楚像這樣的型別同義詞是否是一件好事——許多 Haskeller 會爭辯說你應該使用newtypes 實際提供額外型別安全性(或使用現有的庫型別,例如來自library units),或者否則只是硬編碼Float。
順便說一句,很少有充分的理由使用Float,只需使用Double.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/416351.html
標籤:
上一篇:每次有空白單元格時如何將Google表格中的一列拆分為單獨的列
下一篇:Data.Aeson匯入密鑰
