Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Frontull Samuel
alpha
Commits
68b7f1bf
Commit
68b7f1bf
authored
Jul 27, 2021
by
Frontull Samuel
Browse files
changed string representation to \abx -> x
parent
c6b49c55
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
270 additions
and
21 deletions
+270
-21
pcp/.stylish-haskell.yaml
pcp/.stylish-haskell.yaml
+249
-0
pcp/pcp.hs
pcp/pcp.hs
+21
-21
No files found.
pcp/.stylish-haskell.yaml
0 → 100644
View file @
68b7f1bf
# stylish-haskell configuration file
# ==================================
# The stylish-haskell tool is mainly configured by specifying steps. These steps
# are a list, so they have an order, and one specific step may appear more than
# once (if needed). Each file is processed by these steps in the given order.
steps
:
# Convert some ASCII sequences to their Unicode equivalents. This is disabled
# by default.
# - unicode_syntax:
# # In order to make this work, we also need to insert the UnicodeSyntax
# # language pragma. If this flag is set to true, we insert it when it's
# # not already present. You may want to disable it if you configure
# # language extensions using some other method than pragmas. Default:
# # true.
# add_language_pragma: true
# Align the right hand side of some elements. This is quite conservative
# and only applies to statements where each element occupies a single
# line. All default to true.
-
simple_align
:
cases
:
true
top_level_patterns
:
true
records
:
true
# Import cleanup
-
imports
:
# There are different ways we can align names and lists.
#
# - global: Align the import names and import list throughout the entire
# file.
#
# - file: Like global, but don't add padding when there are no qualified
# imports in the file.
#
# - group: Only align the imports per group (a group is formed by adjacent
# import lines).
#
# - none: Do not perform any alignment.
#
# Default: global.
align
:
global
# The following options affect only import list alignment.
#
# List align has following options:
#
# - after_alias: Import list is aligned with end of import including
# 'as' and 'hiding' keywords.
#
# > import qualified Data.List as List (concat, foldl, foldr, head,
# > init, last, length)
#
# - with_alias: Import list is aligned with start of alias or hiding.
#
# > import qualified Data.List as List (concat, foldl, foldr, head,
# > init, last, length)
#
# - with_module_name: Import list is aligned `list_padding` spaces after
# the module name.
#
# > import qualified Data.List as List (concat, foldl, foldr, head,
# init, last, length)
#
# This is mainly intended for use with `pad_module_names: false`.
#
# > import qualified Data.List as List (concat, foldl, foldr, head,
# init, last, length, scanl, scanr, take, drop,
# sort, nub)
#
# - new_line: Import list starts always on new line.
#
# > import qualified Data.List as List
# > (concat, foldl, foldr, head, init, last, length)
#
# Default: after_alias
list_align
:
after_alias
# Right-pad the module names to align imports in a group:
#
# - true: a little more readable
#
# > import qualified Data.List as List (concat, foldl, foldr,
# > init, last, length)
# > import qualified Data.List.Extra as List (concat, foldl, foldr,
# > init, last, length)
#
# - false: diff-safe
#
# > import qualified Data.List as List (concat, foldl, foldr, init,
# > last, length)
# > import qualified Data.List.Extra as List (concat, foldl, foldr,
# > init, last, length)
#
# Default: true
pad_module_names
:
true
# Long list align style takes effect when import is too long. This is
# determined by 'columns' setting.
#
# - inline: This option will put as much specs on same line as possible.
#
# - new_line: Import list will start on new line.
#
# - new_line_multiline: Import list will start on new line when it's
# short enough to fit to single line. Otherwise it'll be multiline.
#
# - multiline: One line per import list entry.
# Type with constructor list acts like single import.
#
# > import qualified Data.Map as M
# > ( empty
# > , singleton
# > , ...
# > , delete
# > )
#
# Default: inline
long_list_align
:
inline
# Align empty list (importing instances)
#
# Empty list align has following options
#
# - inherit: inherit list_align setting
#
# - right_after: () is right after the module name:
#
# > import Vector.Instances ()
#
# Default: inherit
empty_list_align
:
inherit
# List padding determines indentation of import list on lines after import.
# This option affects 'long_list_align'.
#
# - <integer>: constant value
#
# - module_name: align under start of module name.
# Useful for 'file' and 'group' align settings.
#
# Default: 4
list_padding
:
4
# Separate lists option affects formatting of import list for type
# or class. The only difference is single space between type and list
# of constructors, selectors and class functions.
#
# - true: There is single space between Foldable type and list of it's
# functions.
#
# > import Data.Foldable (Foldable (fold, foldl, foldMap))
#
# - false: There is no space between Foldable type and list of it's
# functions.
#
# > import Data.Foldable (Foldable(fold, foldl, foldMap))
#
# Default: true
separate_lists
:
true
# Space surround option affects formatting of import lists on a single
# line. The only difference is single space after the initial
# parenthesis and a single space before the terminal parenthesis.
#
# - true: There is single space associated with the enclosing
# parenthesis.
#
# > import Data.Foo ( foo )
#
# - false: There is no space associated with the enclosing parenthesis
#
# > import Data.Foo (foo)
#
# Default: false
space_surround
:
false
# Language pragmas
-
language_pragmas
:
# We can generate different styles of language pragma lists.
#
# - vertical: Vertical-spaced language pragmas, one per line.
#
# - compact: A more compact style.
#
# - compact_line: Similar to compact, but wrap each line with
# `{-#LANGUAGE #-}'.
#
# Default: vertical.
style
:
vertical
# Align affects alignment of closing pragma brackets.
#
# - true: Brackets are aligned in same column.
#
# - false: Brackets are not aligned together. There is only one space
# between actual import and closing bracket.
#
# Default: true
align
:
true
# stylish-haskell can detect redundancy of some language pragmas. If this
# is set to true, it will remove those redundant pragmas. Default: true.
remove_redundant
:
true
# Replace tabs by spaces. This is disabled by default.
# - tabs:
# # Number of spaces to use for each tab. Default: 8, as specified by the
# # Haskell report.
# spaces: 8
# Remove trailing whitespace
-
trailing_whitespace
:
{}
# Squash multiple spaces between the left and right hand sides of some
# elements into single spaces. Basically, this undoes the effect of
# simple_align but is a bit less conservative.
# - squash: {}
# A common setting is the number of columns (parts of) code will be wrapped
# to. Different steps take this into account. Default: 80.
columns
:
80
# By default, line endings are converted according to the OS. You can override
# preferred format here.
#
# - native: Native newline format. CRLF on Windows, LF on other OSes.
#
# - lf: Convert to LF ("\n").
#
# - crlf: Convert to CRLF ("\r\n").
#
# Default: native.
newline
:
native
# Sometimes, language extensions are specified in a cabal file or from the
# command line instead of using language pragmas in the file. stylish-haskell
# needs to be aware of these, so it can parse the file correctly.
#
# No language extensions are enabled by default.
# language_extensions:
# - TemplateHaskell
# - QuasiQuotes
# Attempt to find the cabal file in ancestors of the current directory, and
# parse options (currently only language extensions) from that.
#
# Default: true
cabal
:
true
pcp/pcp.hs
View file @
68b7f1bf
...
...
@@ -43,23 +43,23 @@ second = \p -> p (\x -> \y -> y)
-- STRINGS
type
LCStrT
=
forall
a
.
a
->
(
a
->
a
)
->
(
a
->
a
)
->
a
type
LCStrT
=
forall
a
.
(
a
->
a
)
->
(
a
->
a
)
->
a
->
a
newtype
LCStr
=
LCStr
{
unString
::
LCStrT
}
empty
::
LCStr
empty
=
LCStr
$
\
x
a
b
->
x
empty
=
LCStr
$
\
a
b
x
->
x
isempty
::
LCStr
->
LCBool
isempty
=
\
s
->
unString
s
true
af
af
isempty
=
\
s
->
unString
s
af
af
true
conc
::
LCStr
->
LCStr
->
LCStr
conc
=
\
y
z
->
LCStr
$
\
x
a
b
->
unString
y
(
unString
z
x
a
b
)
a
b
conc
=
\
y
z
->
LCStr
$
\
a
b
x
->
unString
y
a
b
(
unString
z
a
b
x
)
prepa
::
LCStr
->
LCStr
prepa
=
\
s
->
LCStr
$
\
x
a
b
->
a
(
unString
s
x
a
b
)
prepa
=
\
s
->
LCStr
$
\
a
b
x
->
a
(
unString
s
a
b
x
)
prepb
::
LCStr
->
LCStr
prepb
=
\
s
->
LCStr
$
\
x
a
b
->
b
(
unString
s
x
a
b
)
prepb
=
\
s
->
LCStr
$
\
a
b
x
->
b
(
unString
s
a
b
x
)
nexta
::
LCPair
LCStr
->
LCPair
LCStr
nexta
=
\
x
->
pair
(
prepa
(
first
x
))
(
first
x
)
...
...
@@ -68,19 +68,19 @@ nextb :: LCPair LCStr -> LCPair LCStr
nextb
=
\
x
->
pair
(
prepb
(
first
x
))
(
first
x
)
hd_a
::
LCStr
->
LCBool
hd_a
=
\
s
->
unString
s
false
at
af
hd_a
=
\
s
->
unString
s
at
af
false
hd_b
::
LCStr
->
LCBool
hd_b
=
\
s
->
unString
s
false
af
at
hd_b
=
\
s
->
unString
s
af
at
false
hd_eq
::
LCStr
->
LCStr
->
LCBool
hd_eq
=
\
x
y
->
lor
(
land
(
hd_a
x
)
(
hd_a
y
))
(
land
(
hd_b
x
)
(
hd_b
y
))
hd
::
LCStr
->
LCStr
hd
=
\
s
->
LCStr
$
\
x
a
b
->
unString
s
x
(
\
y
->
a
x
)
(
\
y
->
b
x
)
hd
=
\
s
->
LCStr
$
\
a
b
x
->
unString
s
(
\
y
->
a
x
)
(
\
y
->
b
x
)
x
tl
::
LCStr
->
LCStr
tl
=
\
s
->
second
(
unString
s
(
pair
empty
empty
)
nexta
nextb
)
tl
=
\
s
->
second
(
unString
s
nexta
nextb
(
pair
empty
empty
))
eq
::
LCStr
->
LCStr
->
LCBool
eq
=
ycomb
(
\
f
x
y
->
...
...
@@ -94,34 +94,34 @@ prefix = ycomb (\f x y -> ite (isempty x) true (land (hd_eq x y) (f (tl x) (tl y
-- SOME STRINGS
a
::
LCStr
a
=
LCStr
$
\
x
a
b
->
a
x
a
=
LCStr
$
\
a
b
x
->
a
x
b
::
LCStr
b
=
LCStr
$
\
x
a
b
->
b
x
b
=
LCStr
$
\
a
b
x
->
b
x
ab
::
LCStr
ab
=
LCStr
$
\
x
a
b
->
a
(
b
x
)
ab
=
LCStr
$
\
a
b
x
->
a
(
b
x
)
ba
::
LCStr
ba
=
LCStr
$
\
x
a
b
->
b
(
a
x
)
ba
=
LCStr
$
\
a
b
x
->
b
(
a
x
)
bb
::
LCStr
bb
=
LCStr
$
\
x
a
b
->
b
(
b
x
)
bb
=
LCStr
$
\
a
b
x
->
b
(
b
x
)
bba
::
LCStr
bba
=
LCStr
$
\
x
a
b
->
b
(
b
(
a
x
))
bba
=
LCStr
$
\
a
b
x
->
b
(
b
(
a
x
))
abb
::
LCStr
abb
=
LCStr
$
\
x
a
b
->
a
(
b
(
b
x
))
abb
=
LCStr
$
\
a
b
x
->
a
(
b
(
b
x
))
abba
::
LCStr
abba
=
LCStr
$
\
x
a
b
->
a
(
b
(
b
(
a
x
)))
abba
=
LCStr
$
\
a
b
x
->
a
(
b
(
b
(
a
x
)))
abbb
::
LCStr
abbb
=
LCStr
$
\
x
a
b
->
a
(
b
(
b
(
b
x
)))
abbb
=
LCStr
$
\
a
b
x
->
a
(
b
(
b
(
b
x
)))
baba
::
LCStr
baba
=
LCStr
$
\
x
a
b
->
b
(
a
(
b
(
a
x
)))
baba
=
LCStr
$
\
a
b
x
->
b
(
a
(
b
(
a
x
)))
-- RECURSION
...
...
@@ -198,7 +198,7 @@ problem_3 = cons (pair bba b) (cons (pair b ab) (cons (pair a bba) nil))
-- Output functions
lcstr_tostr
::
LCStr
->
String
lcstr_tostr
=
\
s
->
unString
s
(
""
)
(
\
a
->
"a"
++
a
)
(
\
b
->
"b"
++
b
)
lcstr_tostr
=
\
s
->
unString
s
(
\
a
->
"a"
++
a
)
(
\
b
->
"b"
++
b
)
(
""
)
lcbool_tostr
::
LCBool
->
String
lcbool_tostr
=
\
b
->
ite
b
"True"
"False"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment