This document is to open discussion about what it takes to create an optional, native data type constraint system for Perl. It it not about building a type system.
In the book Types and Programming Languages by Benjamin Pierce, he writes:
This document is to open discussion about what it takes to create an optional, native data type constraint system for Perl. It it not about building a type system.
In the book Types and Programming Languages by Benjamin Pierce, he writes:
# RedBlack tree mockup for Corinna, modeled after https://metacpan.org/pod/Tree::RedBlack | |
# It is not guaranteed to work | |
use feature 'class'; | |
# we really want this to be a private class, but we can't yet | |
class RedBlack::Node { | |
field $key :reader :writer :param { undef }; | |
field $value :reader :writer :param { undef }; | |
field $parent :reader :writer :param { undef }; |
This document now resides at https://github.com/Ovid/Cor/blob/master/pod/perlclasstut.pod
# I needed to sure I was operating on pristine test databases | |
# every time my code called $test->schema (DBIx::Class and Test::Class::Moose). | |
# This handles that for me | |
package TestsFor::SeKreT { | |
use Test::Class::Moose; | |
use Less::Boilerplate; # gives me a sane version of Perl | |
use File::Copy qw(copy); | |
use File::Spec::Functions qw(catfile); | |
use SeKreT::Util::Data qw( | |
make_slug |
This is something that likely cannot be made into an RFC for the Perl language at this time because implementation would be greatly simplified when the Corinna object model is in core. For example, a base class for what is discussed might look like the following:
# Exception is a poor name for warnings, so a better name is warranted
class Exception :version(v0.1.0) {
# $message and $description might be from a messaging role
field $message :reader :param;
field $description :reader :param { "" };
#!/usr/bin/env perl | |
# I decided it was time to learn PPR::X (Damian Conway's excellent regex-based Perl parser) | |
# | |
# This code is still heuristic in nature, but the challenge seemd fun. | |
# | |
# I thought it would be an interesting project to try to extract dependencies from | |
# Perl code. Thanks to `haj` giving me the clue needed to find a parsing error | |
use strict; |
class Counter { | |
# My::Cor::Attributes is using some hypothetical | |
# tool to extend Cor attributes. Because it's a | |
# `use` statement, it happens at compile time | |
use My::Cor::Attributes ':isa'; | |
has $count :reader :new :isa(PositiveInt) = 0; | |
method inc () { $count++ } | |
method dec () { $count-- unless 0 == $count } | |
} |
package App::Sqitch::Command::grep; | |
use 5.010; | |
use strict; | |
use warnings; | |
use utf8; | |
use App::Sqitch::X qw(hurl); | |
use Moo; | |
use App::Sqitch::Target; | |
use App::Sqitch::Types qw(Str Enum Target Bool); |
This is a rough draft of some thoughts I've had regarding Cor attributes declaration. Please leave your thoughts.
Part of the problem with the Cor object proposal for the Perl
code is that
we tended to use the semantics of has
as declared in the
Moose OO extension for Perl. Unfortunately,
this function handles:
#!/usr/bin/env perl | |
# ALTER TABLE syntax in SQLite is very limited. This script follows the pattern | |
# outlined in https://www.sqlite.org/lang_altertable.html to make it easier to | |
# alter a table in SQLite | |
# this script is designed to use core Perl so that non-Perl users can use it | |
use 5.6.1; # minimum version for File::Temp | |
use strict; | |
use warnings; |