Haskell让......让......让

Ben*_* K. 0 haskell let

得到一些代码来完成.但我不知道如何处理这个禁止的表达.这是代码:

data Zutat = Tomate | Fleisch | Salat
data Bun = Weizen | Roggen
data Sosse = Ketchup Sosse | Mayo Sosse | Keine
data Burger = Burger Bun [Zutat] Sosse
Run Code Online (Sandbox Code Playgroud)

我需要完成代码:

let zt =               in -- Zutat
  let so =               in -- Sosse
    let dw =
Run Code Online (Sandbox Code Playgroud)

dw 必须像 dw = Weizen [Tomate,Fleisch,Fleisch] (Mayo (Ketchup Keine))

明白啦:

zt = [Tomate,Fleisch,Fleisch]
so = Mayo (Ketchup Keine)
dw = Burger Weizen zt so
Run Code Online (Sandbox Code Playgroud)

但是我如何将它构建到let in表达式中呢?

Jon*_*rdy 5

您可以将这些表达式插入let表达式中:

let zt = [Tomate, Fleisch, Fleisch] in
  let so = Mayo (Ketchup Keine) in
    let dw = Burger Weizen zt so in
      ...
Run Code Online (Sandbox Code Playgroud)

或者使用单个let表达式:

let
  zt = [Tomate, Fleisch, Fleisch]
  so = Mayo (Ketchup Keine)
  dw = Burger Weizen zt so
in ...
Run Code Online (Sandbox Code Playgroud)

完整的例子:

data Zutat = Tomate | Fleisch | Salat
  deriving (Show)

data Bun = Weizen | Roggen
  deriving (Show)

data Sosse = Ketchup Sosse | Mayo Sosse | Keine
  deriving (Show)

data Burger = Burger Bun [Zutat] Sosse
  deriving (Show)

main :: IO ()
main = let
  zt = [Tomate, Fleisch, Fleisch]
  so = Mayo (Ketchup Keine)
  dw = Burger Weizen zt so
  in print dw
Run Code Online (Sandbox Code Playgroud)

输出:

Burger Weizen [Tomate,Fleisch,Fleisch] (Mayo (Ketchup Keine))
Run Code Online (Sandbox Code Playgroud)

听起来您需要查阅有关基本Haskell语法的参考.