feat: tipos core Option[T], Pair[A,B] y Error base

Tres tipos nuevos en core:
- Option[T]: tipo suma Some/None para valores opcionales
- Pair[A,B]: tipo producto genérico para agrupar dos valores
- Error: tipo de error base referenciado como error_type por impuras

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-28 02:23:03 +01:00
parent 5ac4c52e67
commit 9fb1e30e18
6 changed files with 111 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
package core
// Error is the standard error type for impure functions in the registry.
// Wraps a message string. Used as error_type reference.
type Error struct {
Message string
}
func (e Error) Error() string {
return e.Message
}
+15
View File
@@ -0,0 +1,15 @@
---
name: error
lang: go
domain: core
version: "1.0.0"
algebraic: product
definition: |
type Error struct {
Message string
}
description: "Tipo de error base del registry. Referenciado como error_type por funciones impuras."
tags: [error, base, impure]
uses_types: []
file_path: "types/core/error.go"
---
+43
View File
@@ -0,0 +1,43 @@
package core
// Option represents a value that may or may not be present.
// A sum type: Some(T) | None.
type Option[T any] struct {
value *T
}
// Some creates an Option containing a value.
func Some[T any](v T) Option[T] {
return Option[T]{value: &v}
}
// None creates an empty Option.
func None[T any]() Option[T] {
return Option[T]{}
}
// IsSome returns true if the Option contains a value.
func (o Option[T]) IsSome() bool {
return o.value != nil
}
// IsNone returns true if the Option is empty.
func (o Option[T]) IsNone() bool {
return o.value == nil
}
// Unwrap returns the value or panics if None.
func (o Option[T]) Unwrap() T {
if o.value == nil {
panic("called Unwrap on None")
}
return *o.value
}
// UnwrapOr returns the value or a default if None.
func (o Option[T]) UnwrapOr(def T) T {
if o.value != nil {
return *o.value
}
return def
}
+19
View File
@@ -0,0 +1,19 @@
---
name: option
lang: go
domain: core
version: "1.0.0"
algebraic: sum
definition: |
type Option[T any] struct {
value *T
}
description: "Tipo suma generico que representa un valor opcional: Some(T) o None. Alternativa a punteros nil para modelar ausencia de valor de forma explicita."
tags: [option, sum, nullable, functional, generic]
uses_types: []
file_path: "types/core/option.go"
---
## Notas
Tipo suma con dos variantes: Some(T) y None. Inspirado en Option de Rust.
+7
View File
@@ -0,0 +1,7 @@
package core
// Pair holds two values of potentially different types.
type Pair[A any, B any] struct {
First A
Second B
}
+16
View File
@@ -0,0 +1,16 @@
---
name: pair
lang: go
domain: core
version: "1.0.0"
algebraic: product
definition: |
type Pair[A any, B any] struct {
First A
Second B
}
description: "Tipo producto generico que agrupa dos valores de tipos potencialmente distintos. Util para ZipSlices y operaciones que devuelven dos resultados."
tags: [pair, tuple, product, generic]
uses_types: []
file_path: "types/core/pair.go"
---