Saya belum menemukan yang serupa di stackoverflow. Saya melakukan beberapa hal universitas, tetapi terjebak dengan yang berikut ini.

Jadi saya punya dua jenis.

 type Val = Either Int Bool
 type Env = [(Name, Val)]

Salah satunya bisa dimengerti. Jadi Env adalah daftar tupple di mana nilai pertama dari tupple adalah type Name = String Tapi ada apa dengan tipe yang disebut Val? Seperti bagaimana cara mengembalikan nilai untuk itu?

Saya memiliki cuplikan untuk sesuatu yang akan saya lakukan. Tetapi mengatakan kesalahan ketik. Ada tips?

evalExp :: Exp -> (Env -> Val)   
evalExp exp env = go exp where

  go :: Exp -> Val
  go (IntLit n)  =  n
0
Atee Józsa 27 Mei 2021, 21:44

2 jawaban

Jawaban Terbaik

Either a b< /strong> memiliki dua konstruktor data: Left a, dan Right b.

Dalam hal ini kita menggunakan Either Int Bool, sehingga kita dapat membuat objek dengan Left someInt dan Right someBool.

Kemungkinan n di IntLit adalah Int, jadi kita bisa mengembalikan :

go :: Exp -> Val
go (IntLit n) = Left n
4
Willem Van Onsem 27 Mei 2021, 18:46
data Either a b = Left a | Right b

Jadi type Val = Either Int Bool adalah untuk baik Int atau Bool

Perjalananmu adalah

go :: Exp -> Val
go (IntLit n) = Left n
go ...
4
Carsten 27 Mei 2021, 18:46