mirror of https://github.com/Wilfred/difftastic/
322 lines
8.0 KiB
Plaintext
322 lines
8.0 KiB
Plaintext
================================================================================
|
|
Excerpt from stdlib's base.gleam
|
|
================================================================================
|
|
|
|
import gleam/bit_string
|
|
import gleam/string
|
|
|
|
/// Encodes a BitString into a base 64 encoded string.
|
|
///
|
|
pub fn encode64(input: BitString, padding: Bool) -> String {
|
|
let encoded = do_encode64(input)
|
|
case padding {
|
|
True -> encoded
|
|
False -> string.replace(encoded, "=", "")
|
|
}
|
|
}
|
|
|
|
if erlang {
|
|
external fn do_encode64(BitString) -> String =
|
|
"base64" "encode"
|
|
}
|
|
|
|
if javascript {
|
|
external fn do_encode64(BitString) -> String =
|
|
"../gleam_stdlib.mjs" "encode64"
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(source_file
|
|
(import
|
|
module: (module))
|
|
(import
|
|
module: (module))
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(public_function
|
|
name: (identifier)
|
|
parameters: (function_parameters
|
|
(function_parameter
|
|
name: (identifier)
|
|
type: (type
|
|
name: (type_identifier)))
|
|
(function_parameter
|
|
name: (identifier)
|
|
type: (type
|
|
name: (type_identifier))))
|
|
return_type: (type
|
|
name: (type_identifier))
|
|
body: (function_body
|
|
(let
|
|
pattern: (identifier)
|
|
value: (function_call
|
|
function: (identifier)
|
|
arguments: (arguments
|
|
(argument
|
|
value: (identifier)))))
|
|
(case
|
|
subjects: (case_subjects
|
|
(identifier))
|
|
clauses: (case_clauses
|
|
(case_clause
|
|
patterns: (case_clause_patterns
|
|
(case_clause_pattern
|
|
(record_pattern
|
|
name: (type_identifier))))
|
|
value: (identifier))
|
|
(case_clause
|
|
patterns: (case_clause_patterns
|
|
(case_clause_pattern
|
|
(record_pattern
|
|
name: (type_identifier))))
|
|
value: (function_call
|
|
function: (field_access
|
|
record: (identifier)
|
|
field: (label))
|
|
arguments: (arguments
|
|
(argument
|
|
value: (identifier))
|
|
(argument
|
|
value: (string
|
|
(quoted_content)))
|
|
(argument
|
|
value: (string)))))))))
|
|
(target_group
|
|
target: (target)
|
|
(external_function
|
|
name: (identifier)
|
|
parameters: (function_parameters
|
|
(function_parameter
|
|
type: (type
|
|
name: (type_identifier))))
|
|
return_type: (type
|
|
name: (type_identifier))
|
|
body: (external_function_body
|
|
(string
|
|
(quoted_content))
|
|
(string
|
|
(quoted_content)))))
|
|
(target_group
|
|
target: (target)
|
|
(external_function
|
|
name: (identifier)
|
|
parameters: (function_parameters
|
|
(function_parameter
|
|
type: (type
|
|
name: (type_identifier))))
|
|
return_type: (type
|
|
name: (type_identifier))
|
|
body: (external_function_body
|
|
(string
|
|
(quoted_content))
|
|
(string
|
|
(quoted_content))))))
|
|
|
|
================================================================================
|
|
Excerpt from stdlib's bool.gleam
|
|
================================================================================
|
|
|
|
//// A type with two possible values, `True` and `False`. Used to indicate whether
|
|
//// things are... true or false!
|
|
////
|
|
//// Often is it clearer and offers more type safety to define a custom type
|
|
//// than to use `Bool`. For example, rather than having a `is_teacher: Bool`
|
|
//// field consider having a `role: SchoolRole` field where `SchoolRole` is a custom
|
|
//// type that can be either `Student` or `Teacher`.
|
|
|
|
import gleam/order.{Order}
|
|
|
|
/// Returns the opposite bool value.
|
|
///
|
|
/// This is the same as the `!` or `not` operators in some other languages.
|
|
///
|
|
/// ## Examples
|
|
///
|
|
/// > negate(True)
|
|
/// False
|
|
///
|
|
/// > negate(False)
|
|
/// True
|
|
///
|
|
pub fn negate(bool: Bool) -> Bool {
|
|
case bool {
|
|
True -> False
|
|
False -> True
|
|
}
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(source_file
|
|
(module_comment)
|
|
(module_comment)
|
|
(module_comment)
|
|
(module_comment)
|
|
(module_comment)
|
|
(module_comment)
|
|
(module_comment)
|
|
(import
|
|
module: (module)
|
|
imports: (unqualified_imports
|
|
(unqualified_import
|
|
name: (type_identifier))))
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(statement_comment)
|
|
(public_function
|
|
name: (identifier)
|
|
parameters: (function_parameters
|
|
(function_parameter
|
|
name: (identifier)
|
|
type: (type
|
|
name: (type_identifier))))
|
|
return_type: (type
|
|
name: (type_identifier))
|
|
body: (function_body
|
|
(case
|
|
subjects: (case_subjects
|
|
(identifier))
|
|
clauses: (case_clauses
|
|
(case_clause
|
|
patterns: (case_clause_patterns
|
|
(case_clause_pattern
|
|
(record_pattern
|
|
name: (type_identifier))))
|
|
value: (record
|
|
name: (type_identifier)))
|
|
(case_clause
|
|
patterns: (case_clause_patterns
|
|
(case_clause_pattern
|
|
(record_pattern
|
|
name: (type_identifier))))
|
|
value: (record
|
|
name: (type_identifier))))))))
|
|
|
|
================================================================================
|
|
Trailing commas
|
|
================================================================================
|
|
|
|
import animal.{Cat,}
|
|
|
|
const foo: #(Int,) = #(1,)
|
|
const bar = [1,]
|
|
const cat:Cat(String,) = Cat(name: "Nubi",)
|
|
|
|
type Thing {
|
|
First(name: String,)
|
|
}
|
|
|
|
external fn foo(String,) -> String = "foo" "bar"
|
|
|
|
fn foo(a,) {
|
|
myfun(a,)
|
|
let Cat(name: name,) = Cat(..a, name: "George",)
|
|
let #(a) = #(a,)
|
|
let [x,] = [1,]
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(source_file
|
|
(import
|
|
(module)
|
|
(unqualified_imports
|
|
(unqualified_import
|
|
(type_identifier))))
|
|
(constant
|
|
(identifier)
|
|
(tuple_type
|
|
(type
|
|
(type_identifier)))
|
|
(tuple
|
|
(integer)))
|
|
(constant
|
|
(identifier)
|
|
(list
|
|
(integer)))
|
|
(constant
|
|
(identifier)
|
|
(type
|
|
(type_identifier)
|
|
(type_arguments
|
|
(type_argument
|
|
(type
|
|
(type_identifier)))))
|
|
(record
|
|
(type_identifier)
|
|
(arguments
|
|
(argument
|
|
(label)
|
|
(string
|
|
(quoted_content))))))
|
|
(type_definition
|
|
(type_name
|
|
(type_identifier))
|
|
(data_constructors
|
|
(data_constructor
|
|
(type_identifier)
|
|
(data_constructor_arguments
|
|
(data_constructor_argument
|
|
(label)
|
|
(type
|
|
(type_identifier)))))))
|
|
(external_function
|
|
(identifier)
|
|
(function_parameters
|
|
(function_parameter
|
|
(type
|
|
(type_identifier))))
|
|
(type
|
|
(type_identifier))
|
|
(external_function_body
|
|
(string
|
|
(quoted_content))
|
|
(string
|
|
(quoted_content))))
|
|
(function
|
|
(identifier)
|
|
(function_parameters
|
|
(function_parameter
|
|
(identifier)))
|
|
(function_body
|
|
(function_call
|
|
(identifier)
|
|
(arguments
|
|
(argument
|
|
(identifier))))
|
|
(let
|
|
(record_pattern
|
|
(type_identifier)
|
|
(record_pattern_arguments
|
|
(record_pattern_argument
|
|
(label)
|
|
(identifier))))
|
|
(record_update
|
|
(type_identifier)
|
|
(identifier)
|
|
(record_update_arguments
|
|
(record_update_argument
|
|
(label)
|
|
(string
|
|
(quoted_content))))))
|
|
(let
|
|
(tuple_pattern
|
|
(identifier))
|
|
(tuple
|
|
(identifier)))
|
|
(let
|
|
(list_pattern
|
|
(identifier))
|
|
(list
|
|
(integer))))))
|