Skip to content

Commit

Permalink
add Pair type to prelude
Browse files Browse the repository at this point in the history
  • Loading branch information
MicroProofs committed Apr 27, 2024
1 parent 2bf22d7 commit 42f6e6d
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions crates/aiken-lang/src/builtins.rs
Expand Up @@ -20,6 +20,7 @@ pub const BOOL: &str = "Bool";
pub const INT: &str = "Int";
pub const DATA: &str = "Data";
pub const LIST: &str = "List";
pub const PAIR: &str = "Pair";
pub const VOID: &str = "Void";
pub const G1_ELEMENT: &str = "G1Element";
pub const G2_ELEMENT: &str = "G2Element";
Expand Down Expand Up @@ -320,6 +321,49 @@ pub fn prelude(id_gen: &IdGenerator) -> TypeInfo {
},
);

// Pair(a, b)
let fst_parameter = generic_var(id_gen.next());
let snd_parameter = generic_var(id_gen.next());
prelude.types.insert(
PAIR.to_string(),
TypeConstructor {
location: Span::empty(),
parameters: vec![fst_parameter.clone(), snd_parameter.clone()],
tipo: pair(fst_parameter.clone(), snd_parameter.clone()),
module: "".to_string(),
public: true,
},
);

prelude
.types_constructors
.insert(PAIR.to_string(), vec![PAIR.to_string()]);

let mut pair_fields = HashMap::new();
pair_fields.insert("fst".to_string(), (0, Span::empty()));
pair_fields.insert("snd".to_string(), (1, Span::empty()));
prelude.values.insert(
PAIR.to_string(),
ValueConstructor::public(
function(
vec![fst_parameter.clone(), snd_parameter.clone()],
pair(fst_parameter, snd_parameter),
),
ValueConstructorVariant::Record {
module: "".into(),
name: PAIR.to_string(),
field_map: Some(FieldMap {
arity: 2,
fields: pair_fields,
is_function: false,
}),
arity: 2,
location: Span::empty(),
constructors_count: 1,
},
),
);

// String
prelude.types.insert(
STRING.to_string(),
Expand Down

0 comments on commit 42f6e6d

Please sign in to comment.