Skip to content

Instantly share code, notes, and snippets.

@evaisse
Created February 11, 2025 15:20
Show Gist options
  • Save evaisse/981cac11cd5b8e78ee7df61277ab49d4 to your computer and use it in GitHub Desktop.
Save evaisse/981cac11cd5b8e78ee7df61277ab49d4 to your computer and use it in GitHub Desktop.
Algrebraic data types
// Définition d'une classe scellée pour représenter un résultat
// Sealed class : https://dart.dev/language/class-modifiers#sealed
sealed class ASealedClass {}
// cas 1
class Success extends ASealedClass {}
// cas 2
class Failure extends ASealedClass {}
/// sous la forme d'un enum
enum AnEnum { success, error }
/// sous la forme d'un record
typedef ARecord = ({
bool isSuccess,
});
/// demo time!
void main() {
ASealedClass aClass = provide<ASealedClass>(() => Success());
aClass = switch (aClass) {
Success() => aClass,
Failure() => aClass,
};
AnEnum anEnum = provide<AnEnum>(() => AnEnum.success);
anEnum = switch (anEnum) {
AnEnum.success => anEnum,
AnEnum.error => anEnum,
};
ARecord aRecord = provide<ARecord>(() => (isSuccess: true));
aRecord = switch (aRecord) {
(isSuccess: true) => aRecord,
(isSuccess: false) => aRecord,
};
}
// method to alias type
T provide<T>(T Function() a) => a();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment