More docs
This commit is contained in:
parent
77e3b57ff0
commit
7dc5392a81
|
@ -1,7 +1,7 @@
|
||||||
# Assert
|
# Assert
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
assert rawdata is SomeType
|
assert rawdata = SomeType
|
||||||
```
|
```
|
||||||
|
|
||||||
Causes the script to fail if the rawdata doesn't match the structure of datumtype
|
Causes the script to fail if the rawdata doesn't match the structure of datumtype
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
If statements
|
If statements
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
if condition {
|
if condition {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -12,7 +12,7 @@ if condition {
|
||||||
|
|
||||||
Case Patterns
|
Case Patterns
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
when color is {
|
when color is {
|
||||||
Green -> "Success."
|
Green -> "Success."
|
||||||
Blue -> "Warning."
|
Blue -> "Warning."
|
||||||
|
@ -22,7 +22,7 @@ when color is {
|
||||||
|
|
||||||
Let bindings with blocks
|
Let bindings with blocks
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
let num = -5
|
let num = -5
|
||||||
let absNum = if num>=0 {num} else {-num}
|
let absNum = if num>=0 {num} else {-num}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,19 @@
|
||||||
# Bool
|
# Bool
|
||||||
|
|
||||||
Bools are True or False
|
Bools are True or False
|
||||||
|
|
||||||
|
There are logical conjunctions (True && True) or disjunctions (True || False).
|
||||||
|
|
||||||
|
```gleam
|
||||||
|
fn negate(b: Bool)->Bool {
|
||||||
|
if b {
|
||||||
|
False
|
||||||
|
}else{
|
||||||
|
True
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn and(b: Bool, c: Bool, d: Bool)->Bool{
|
||||||
|
b && c && d
|
||||||
|
}
|
||||||
|
```
|
|
@ -1,6 +1,6 @@
|
||||||
# Comments
|
# Comments
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
// Line comments begin with a double-slash
|
// Line comments begin with a double-slash
|
||||||
|
|
||||||
/// Doc comments begin with a triple-slash
|
/// Doc comments begin with a triple-slash
|
||||||
|
|
|
@ -1 +1,8 @@
|
||||||
# Constants
|
# Constants
|
||||||
|
|
||||||
|
Constants (not implemented yet) will be set in the global scope like so:
|
||||||
|
```gleam
|
||||||
|
const x = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Similar to a let binding, but with a const keyword instead.
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
Instantiation
|
Instantiation
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
type Color {
|
type Color {
|
||||||
Red
|
Red
|
||||||
Blue
|
Blue
|
||||||
|
@ -18,7 +18,7 @@ Enum types can be thought of as the unit of product types.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
fn myFavouriteColor() -> Color {
|
fn myFavouriteColor() -> Color {
|
||||||
Red
|
Red
|
||||||
}
|
}
|
||||||
|
@ -26,14 +26,14 @@ fn myFavouriteColor() -> Color {
|
||||||
|
|
||||||
### Product Types
|
### Product Types
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
type MyValue {
|
type MyValue {
|
||||||
Name(String)
|
Name(String)
|
||||||
Age(Int)
|
Age(Int)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```gleam
|
||||||
fn eitherNameOrAge(b: Bool) -> MyValue {
|
fn eitherNameOrAge(b: Bool) -> MyValue {
|
||||||
if b {
|
if b {
|
||||||
Name("James")
|
Name("James")
|
||||||
|
|
|
@ -1 +1,43 @@
|
||||||
# Functions
|
# Functions
|
||||||
|
|
||||||
|
Functions can be instantiated like so:
|
||||||
|
```gleam
|
||||||
|
fn f(x) {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
l functions in aiken are pure without side effect, so all functions also must return some value.
|
||||||
|
A function with no return value (like above) will error.
|
||||||
|
|
||||||
|
Providing arg types:
|
||||||
|
```gleam
|
||||||
|
fn f(x: Int) {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
and return types:
|
||||||
|
|
||||||
|
```gleam
|
||||||
|
fn f(x: Int) -> Int {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
and the last value is implicitly returned:
|
||||||
|
|
||||||
|
```gleam
|
||||||
|
fn f(x: Int) -> Int {
|
||||||
|
x + 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Functions can be made public in modules so they can be accessed by others
|
||||||
|
|
||||||
|
```gleam
|
||||||
|
pub fn myFunction(a: List(a)) {
|
||||||
|
// do something useful...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
A
|
|
@ -1 +1,15 @@
|
||||||
# Int
|
# Int
|
||||||
|
|
||||||
|
Ints are plutus integers which are arbitrary size.
|
||||||
|
|
||||||
|
So, there is no underflow. Basic arithmetic can be done for O(1) between ints (+,-,*).
|
||||||
|
|
||||||
|
```gleam
|
||||||
|
// A convenient helper function to get the number 7.
|
||||||
|
pub fn get7(){
|
||||||
|
let x = 3
|
||||||
|
let y = 2
|
||||||
|
let z = 1
|
||||||
|
x*y + z
|
||||||
|
}
|
||||||
|
```
|
|
@ -1 +1,21 @@
|
||||||
# List
|
# List
|
||||||
|
|
||||||
|
Aiken lists are plutus linked lists. Accessing by index is O(n). Appending or accessing head is O(1). Grabbing tail is O(1).
|
||||||
|
|
||||||
|
There is no builtin syntax for accessing by index as this is implemented by standard libs.
|
||||||
|
|
||||||
|
Accessing head, tail, or preceding elements can be done by pattern matching.
|
||||||
|
|
||||||
|
```gleam
|
||||||
|
// this function checks if a list has a sequence of 1 then 2 contained within it.
|
||||||
|
fn listStuff(a: List(Int)){
|
||||||
|
when a is {
|
||||||
|
[1,2, ..tail] -> True
|
||||||
|
[]->False
|
||||||
|
_ -> listStuff([2, ..tail])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Helper functions for safely accessing head, tail, are provided in standard lib but are implemented using comprehensions.
|
||||||
|
It is usually best to use your own comprehensions for efficiency (until the optimiser is better).
|
|
@ -1 +1,23 @@
|
||||||
# Option
|
# Option
|
||||||
|
|
||||||
|
We define option as a generic type like so
|
||||||
|
|
||||||
|
```
|
||||||
|
pub type Option(a) {
|
||||||
|
None
|
||||||
|
Some(a)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, functions which fail may safely return an optional value.
|
||||||
|
|
||||||
|
```
|
||||||
|
pub fn getHead(a: List(a))->a {
|
||||||
|
when a is {
|
||||||
|
[a, .._]->Some(a)
|
||||||
|
[]->None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
An unsafe variant of this function might instead assert that there is a head, and return it.
|
||||||
|
|
Loading…
Reference in New Issue