Я пытаюсь написать удобную обертку для библиотеки hnetcdf
. Вместо того чтобы иметь дело с его низкоуровневым интерфейсом, я хочу иметь возможность описать структуру файла NetCDF простым декларативным образом. Для достижения этой цели я создал кучу АТД:Цепочки параметров без круглых скобок в Haskell
data Info = Info FileInfo Dimentions Variables
data FileInfo = FileInfo String Int
data Dimentions = Dimentions [Dimention]
data Variables = Variables [Variable]
data Dimention = BoundedDimention String Int | UnboundedDimention String
data Variable = Variable String Int NC.NcType [Dimention]
Они работают, если я использую их, как в следующем примере:
writeNetCDF :: FilePath -> IO()
writeNetCDF filename = do
let dimX, dimY, dimZ = ...
let var1, var2 = ...
let info = Info (FileInfo filename 1)
(Dimentions [dimX, dimY, dimZ])
(Variables [var1, var2])
...
, но я действительно не нравится дополнительные скобки. Я пытался использовать ($)
и (.)
, но не повезло:
-- No way.
let info = Info $ FileInfo filename 1
$ Dimentions [dimX, dimY, dimZ]
$ Variables [var1, var2]
Есть еще один способ кэрри параметров цепи?
Для информации '' 'является право-ассоциативной. 'Info $ FileInfo filename 1 $ Dimentions [dimX, dimY, dimZ] $ Variables [var1, var2]' эквивалентно 'Info (FileInfo filename 1 (Dimentions [dimX, dimY, dimZ] (Variables [var1, var2]))) ', что вы не хотите. – Jubobs