Skip to content

Instantly share code, notes, and snippets.

View soareschen's full-sized avatar
🏠
Working from home

Soares Chen soareschen

🏠
Working from home
View GitHub Profile
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHVMj2JxwEJc8zpHLSD3T1memwQ/tkCJk5Rf2zseCvpv soares@soares-desktop
@soareschen
soareschen / cgp-cake.rs
Created December 25, 2024 20:17
Scala Cake in CGP
// This is an example of how the Scala cake pattern can be used in CGP,
// following the example at https://www.baeldung.com/scala/cake-pattern
pub mod traits {
use std::collections::BTreeMap;
use anyhow::Error;
use cgp::prelude::*;
// For simplicity of the example, we use `dyn` trait to represent test cases
// This is a response on how to use Context-Generic Programming (CGP)
// to solve the specialization problem in the following blog post:
// https://oakchris1955.eu/posts/bypassing_specialization/
//
// More info available at https://contextgeneric.dev/.
use cgp::core::error::ErrorTypeProviderComponent;
use cgp::prelude::*;
// Redesign the FileSystem trait with CGP
// This is an example use of the extensible builder pattern in Context-Generic Programming (CGP)
// to progressively build a struct with missing fields filled with default values.
//
// This is in response to the question at https://www.reddit.com/r/rust/comments/1m4d8a8/how_to_handle_default_values_for_parameters/.
// More info at https://contextgeneric.dev/blog/extensible-datatypes-part-1/
use cgp::core::field::CanFinalizeWithDefault;
use cgp::prelude::*;
#[derive(Default)]