Examine individual changes
This page allows you to examine the variables generated by the Abuse Filter for an individual change.
Variables generated for this change
| Variable | Value |
|---|---|
Edit count of the user (user_editcount) | 0 |
Name of the user account (user_name) | 'Pstron' |
Age of the user account (user_age) | 504 |
Page ID (page_id) | 0 |
Page namespace (page_namespace) | 0 |
Page title (without namespace) (page_title) | 'Poop:Poop' |
Full page title (page_prefixedtitle) | 'Poop:Poop' |
Action (action) | 'edit' |
Edit summary/reason (summary) | '' |
Old content model (old_content_model) | '' |
New content model (new_content_model) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext) | '' |
New page wikitext, after the edit (new_wikitext) | ''''Poop''' is a [[functional programming|functional]] [[esoteric programming language]] created by pstron, where everything is a ''poop'' and computation happens by ''pooping'' into other ''poops''. It is based on [[lambda calculus]] with a minimal syntax centered around toilet humor metaphors. The language is implemented as an interpreter written in [[Haskell]].
==Overview==
Poop has no assignments, no mutable objects, and no traditional control structures. Instead, programs are built from three core primitives: <code>poop</code> (lambda abstraction), <code>pooping</code> (function application), and macro definitions. Execution proceeds via substitution, expanding macros and replacing parameters until a result is produced.
==Syntax==
===Tokens and Whitespace===
Tokens must be separated by whitespace (spaces, tabs, or newlines).
===Comments===
* Single‐line: <code>// comment</code>
* Multi‐line: <code>/* comment */</code>
===Identifiers===
* Variable names: lowercase letters and underscores (<code>[a-z_]+</code>).
* Macro names: any identifier that is not a valid variable name; commonly written in PascalCase. May include digits and symbols.
===Literals===
Literals are enclosed between <code>Po</code> and <code>op</code>. The content between them is taken literally.
* <code>Poop</code> → a single space.
* <code>Popoopop</code> → the string "poop" (used to avoid keyword interpretation).
* <code>PoHello Worldop</code> → "Hello World".
Literals are never expanded as macros or treated as keywords.
==Primitives==
===poop (abstraction)===
<pre>
poop ⟨param⟩ poops ⟨body⟩ qooq
</pre>
Creates a lambda abstraction. When applied, every occurrence of ⟨param⟩ in ⟨body⟩ is replaced with the argument.
===pooping (application)===
<pre>
pooping ⟨expr₁⟩ poopy ⟨expr₂⟩ qooq
</pre>
Applies ⟨expr₂⟩ to ⟨expr₁⟩. Evaluation is strict (applicative order).
===Macro definition===
<pre>
poop ⟨name⟩ is ⟨content⟩ qooq
</pre>
Defines ⟨name⟩ as a macro that expands to ⟨content⟩. Macros are non‑recursive and are expanded during execution.
==Built‑in macros==
===Input===
When encountered, the interpreter pauses and reads one line from the user. The line is parsed as Poop code and replaces the <code>Input</code> macro in the program. This allows the user to supply both data and code dynamically.
===Print===
<pre>
pooping Print poopy ⟨x⟩ qooq
</pre>
Evaluates ⟨x⟩, prints its string representation to standard output, and returns ⟨x⟩ unchanged (i.e., it behaves as the identity function with a side effect).
==Examples==
===Hello World===
<pre>
// Define a greeting macro
poop Greet is
poop name poops
Hello Poop name
qooq
qooq
// Print "Hello World"
pooping Print poopy
pooping Greet poopy World qooq
qooq
</pre>
===Church numerals===
<pre>
// Church numeral zero
poop 0 is
poop f poops poop x poops x qooq qooq
qooq
// Successor function
poop Succ is
poop n poops
poop f poops
poop x poops
pooping f poopy
pooping pooping n poopy f qooq poopy x qooq
qooq
qooq
qooq
qooq
qooq
</pre>
==Computational class==
Poop is [[Turing complete]] because it implements the untyped lambda calculus with macro expansion (which provides a form of recursion/composition). Church numerals and fixed‑point combinators can be expressed.
==Implementation==
The reference implementation is written in Haskell and available on [[GitHub]]: [https://github.com/pstron/poop pstron/poop]. The project is dual‑licensed under the MIT License and a custom "Poop License" that disclaims all liability.
==See also==
* [[Lambda calculus]]
* [[Functional programming]]
* [[Esoteric programming language]]
==External resources==
* [https://github.com/pstron/poop GitHub repository]
* [https://github.com/pstron/poop/blob/main/TPRM.md The Poop Reference Manual]
[[Category:Functional esoteric languages]]
[[Category:Languages]]
[[Category:2026]]
[[Category:Implemented]]' |
Unified diff of changes made by edit (edit_diff) | '@@ -1,0 +1,110 @@
+'''Poop''' is a [[functional programming|functional]] [[esoteric programming language]] created by pstron, where everything is a ''poop'' and computation happens by ''pooping'' into other ''poops''. It is based on [[lambda calculus]] with a minimal syntax centered around toilet humor metaphors. The language is implemented as an interpreter written in [[Haskell]].
+
+==Overview==
+Poop has no assignments, no mutable objects, and no traditional control structures. Instead, programs are built from three core primitives: <code>poop</code> (lambda abstraction), <code>pooping</code> (function application), and macro definitions. Execution proceeds via substitution, expanding macros and replacing parameters until a result is produced.
+
+==Syntax==
+===Tokens and Whitespace===
+Tokens must be separated by whitespace (spaces, tabs, or newlines).
+
+===Comments===
+* Single‐line: <code>// comment</code>
+* Multi‐line: <code>/* comment */</code>
+
+===Identifiers===
+* Variable names: lowercase letters and underscores (<code>[a-z_]+</code>).
+* Macro names: any identifier that is not a valid variable name; commonly written in PascalCase. May include digits and symbols.
+
+===Literals===
+Literals are enclosed between <code>Po</code> and <code>op</code>. The content between them is taken literally.
+* <code>Poop</code> → a single space.
+* <code>Popoopop</code> → the string "poop" (used to avoid keyword interpretation).
+* <code>PoHello Worldop</code> → "Hello World".
+
+Literals are never expanded as macros or treated as keywords.
+
+==Primitives==
+===poop (abstraction)===
+<pre>
+poop ⟨param⟩ poops ⟨body⟩ qooq
+</pre>
+Creates a lambda abstraction. When applied, every occurrence of ⟨param⟩ in ⟨body⟩ is replaced with the argument.
+
+===pooping (application)===
+<pre>
+pooping ⟨expr₁⟩ poopy ⟨expr₂⟩ qooq
+</pre>
+Applies ⟨expr₂⟩ to ⟨expr₁⟩. Evaluation is strict (applicative order).
+
+===Macro definition===
+<pre>
+poop ⟨name⟩ is ⟨content⟩ qooq
+</pre>
+Defines ⟨name⟩ as a macro that expands to ⟨content⟩. Macros are non‑recursive and are expanded during execution.
+
+==Built‑in macros==
+===Input===
+When encountered, the interpreter pauses and reads one line from the user. The line is parsed as Poop code and replaces the <code>Input</code> macro in the program. This allows the user to supply both data and code dynamically.
+
+===Print===
+<pre>
+pooping Print poopy ⟨x⟩ qooq
+</pre>
+Evaluates ⟨x⟩, prints its string representation to standard output, and returns ⟨x⟩ unchanged (i.e., it behaves as the identity function with a side effect).
+
+==Examples==
+===Hello World===
+<pre>
+// Define a greeting macro
+poop Greet is
+ poop name poops
+ Hello Poop name
+ qooq
+qooq
+
+// Print "Hello World"
+pooping Print poopy
+ pooping Greet poopy World qooq
+qooq
+</pre>
+
+===Church numerals===
+<pre>
+// Church numeral zero
+poop 0 is
+ poop f poops poop x poops x qooq qooq
+qooq
+
+// Successor function
+poop Succ is
+ poop n poops
+ poop f poops
+ poop x poops
+ pooping f poopy
+ pooping pooping n poopy f qooq poopy x qooq
+ qooq
+ qooq
+ qooq
+ qooq
+qooq
+</pre>
+
+==Computational class==
+Poop is [[Turing complete]] because it implements the untyped lambda calculus with macro expansion (which provides a form of recursion/composition). Church numerals and fixed‑point combinators can be expressed.
+
+==Implementation==
+The reference implementation is written in Haskell and available on [[GitHub]]: [https://github.com/pstron/poop pstron/poop]. The project is dual‑licensed under the MIT License and a custom "Poop License" that disclaims all liability.
+
+==See also==
+* [[Lambda calculus]]
+* [[Functional programming]]
+* [[Esoteric programming language]]
+
+==External resources==
+* [https://github.com/pstron/poop GitHub repository]
+* [https://github.com/pstron/poop/blob/main/TPRM.md The Poop Reference Manual]
+
+[[Category:Functional esoteric languages]]
+[[Category:Languages]]
+[[Category:2026]]
+[[Category:Implemented]]
' |
New page size (new_size) | 4008 |
Old page size (old_size) | 0 |
Lines added in edit (added_lines) | [
0 => ''''Poop''' is a [[functional programming|functional]] [[esoteric programming language]] created by pstron, where everything is a ''poop'' and computation happens by ''pooping'' into other ''poops''. It is based on [[lambda calculus]] with a minimal syntax centered around toilet humor metaphors. The language is implemented as an interpreter written in [[Haskell]].',
1 => '',
2 => '==Overview==',
3 => 'Poop has no assignments, no mutable objects, and no traditional control structures. Instead, programs are built from three core primitives: <code>poop</code> (lambda abstraction), <code>pooping</code> (function application), and macro definitions. Execution proceeds via substitution, expanding macros and replacing parameters until a result is produced.',
4 => '',
5 => '==Syntax==',
6 => '===Tokens and Whitespace===',
7 => 'Tokens must be separated by whitespace (spaces, tabs, or newlines).',
8 => '',
9 => '===Comments===',
10 => '* Single‐line: <code>// comment</code>',
11 => '* Multi‐line: <code>/* comment */</code>',
12 => '',
13 => '===Identifiers===',
14 => '* Variable names: lowercase letters and underscores (<code>[a-z_]+</code>).',
15 => '* Macro names: any identifier that is not a valid variable name; commonly written in PascalCase. May include digits and symbols.',
16 => '',
17 => '===Literals===',
18 => 'Literals are enclosed between <code>Po</code> and <code>op</code>. The content between them is taken literally.',
19 => '* <code>Poop</code> → a single space.',
20 => '* <code>Popoopop</code> → the string "poop" (used to avoid keyword interpretation).',
21 => '* <code>PoHello Worldop</code> → "Hello World".',
22 => '',
23 => 'Literals are never expanded as macros or treated as keywords.',
24 => '',
25 => '==Primitives==',
26 => '===poop (abstraction)===',
27 => '<pre>',
28 => 'poop ⟨param⟩ poops ⟨body⟩ qooq',
29 => '</pre>',
30 => 'Creates a lambda abstraction. When applied, every occurrence of ⟨param⟩ in ⟨body⟩ is replaced with the argument.',
31 => '',
32 => '===pooping (application)===',
33 => '<pre>',
34 => 'pooping ⟨expr₁⟩ poopy ⟨expr₂⟩ qooq',
35 => '</pre>',
36 => 'Applies ⟨expr₂⟩ to ⟨expr₁⟩. Evaluation is strict (applicative order).',
37 => '',
38 => '===Macro definition===',
39 => '<pre>',
40 => 'poop ⟨name⟩ is ⟨content⟩ qooq',
41 => '</pre>',
42 => 'Defines ⟨name⟩ as a macro that expands to ⟨content⟩. Macros are non‑recursive and are expanded during execution.',
43 => '',
44 => '==Built‑in macros==',
45 => '===Input===',
46 => 'When encountered, the interpreter pauses and reads one line from the user. The line is parsed as Poop code and replaces the <code>Input</code> macro in the program. This allows the user to supply both data and code dynamically.',
47 => '',
48 => '===Print===',
49 => '<pre>',
50 => 'pooping Print poopy ⟨x⟩ qooq',
51 => '</pre>',
52 => 'Evaluates ⟨x⟩, prints its string representation to standard output, and returns ⟨x⟩ unchanged (i.e., it behaves as the identity function with a side effect).',
53 => '',
54 => '==Examples==',
55 => '===Hello World===',
56 => '<pre>',
57 => '// Define a greeting macro',
58 => 'poop Greet is',
59 => ' poop name poops',
60 => ' Hello Poop name',
61 => ' qooq',
62 => 'qooq',
63 => '',
64 => '// Print "Hello World"',
65 => 'pooping Print poopy',
66 => ' pooping Greet poopy World qooq',
67 => 'qooq',
68 => '</pre>',
69 => '',
70 => '===Church numerals===',
71 => '<pre>',
72 => '// Church numeral zero',
73 => 'poop 0 is',
74 => ' poop f poops poop x poops x qooq qooq',
75 => 'qooq',
76 => '',
77 => '// Successor function',
78 => 'poop Succ is',
79 => ' poop n poops',
80 => ' poop f poops',
81 => ' poop x poops',
82 => ' pooping f poopy',
83 => ' pooping pooping n poopy f qooq poopy x qooq',
84 => ' qooq',
85 => ' qooq',
86 => ' qooq',
87 => ' qooq',
88 => 'qooq',
89 => '</pre>',
90 => '',
91 => '==Computational class==',
92 => 'Poop is [[Turing complete]] because it implements the untyped lambda calculus with macro expansion (which provides a form of recursion/composition). Church numerals and fixed‑point combinators can be expressed.',
93 => '',
94 => '==Implementation==',
95 => 'The reference implementation is written in Haskell and available on [[GitHub]]: [https://github.com/pstron/poop pstron/poop]. The project is dual‑licensed under the MIT License and a custom "Poop License" that disclaims all liability.',
96 => '',
97 => '==See also==',
98 => '* [[Lambda calculus]]',
99 => '* [[Functional programming]]',
100 => '* [[Esoteric programming language]]',
101 => '',
102 => '==External resources==',
103 => '* [https://github.com/pstron/poop GitHub repository]',
104 => '* [https://github.com/pstron/poop/blob/main/TPRM.md The Poop Reference Manual]',
105 => '',
106 => '[[Category:Functional esoteric languages]]',
107 => '[[Category:Languages]]',
108 => '[[Category:2026]]',
109 => '[[Category:Implemented]]'
] |
Unix timestamp of change (timestamp) | '1767962464' |