Skip to content

Instantly share code, notes, and snippets.

@psttf
psttf / TabsComponent.scala
Created December 27, 2021 08:23
TabsComponent.scala
// Bootstrap 5 tabs Scala.js + Outwatch wrapper
final class Tab(
tabId: String,
selected: Boolean,
label: String,
content: VDomModifier,
) {
def navLi: HtmlVNode =
@psttf
psttf / js.sc
Created December 22, 2021 21:11
Sharing scala-dom-types based markup between JVM (scalatags) and JS (OutWatch)
import outwatch.helpers.AttributeBuilder
import outwatch.{Attr, HtmlVNode, VDomModifier}
import scala.language.implicitConversions
object TestComponent extends TestViews(outwatch.dsl) {
type TModifier = VDomModifier
type TRes = VDomModifier
type AtPr = Attr
// "фиксированная" структура
sealed trait BinTree
final case class BinNode(t1: BinTree, t2: BinTree) extends BinTree
final case class Leaf(v: Int) extends BinTree
// в фиксированном варианте возможно только создание простых деревьев,
// их структура заранее зафиксирована в определениях BinNode и Leaf
BinNode(Leaf(1),BinNode(Leaf(2),Leaf(3)))
// к примеру, невозможно создать дерево с необязательными элементами
// оно не скомпилируется
package syntax
import cats.data.NonEmptyList
import cats.syntax.reducible._
package object catssyntax {
object InitLastNel {
def unapply[T](nel: NonEmptyList[T]): Option[(List[T], T)] =
(nel.init, nel.last).some
// based on https://michid.wordpress.com/2010/01/29/scala-type-level-encoding-of-the-ski-calculus/
trait Term {
type ap[x <: Term] <: Term
type eval <: Term
}
// The S combinator
trait S extends Term {
type ap[x <: Term] = S1[x]

Анонимные функции в ООП

// Тип функции A -> B в Scala
trait Function[A, B] {
  def apply(p: A): B
}

// Функциональное значение в Scala
-- since MSSQL 2008 use
-- ALTER USER OrphanUser WITH LOGIN = correctedLoginName;
DECLARE @uname varchar(30)
DECLARE curs1 CURSOR FOR
SELECT name
FROM sysusers
WHERE name <> 'dbo' AND issqluser = 1 AND hasdbaccess = 1
ORDER BY name
OPEN curs1
@psttf
psttf / reduction.scala
Created April 19, 2019 08:41
Lambda reduction template in Scala
sealed trait Term
case class Var(name: String) extends Term
case class Lambda(param: Var, body: Term) extends Term
case class App(term1: Term, term2: Term) extends Term
object LambdaReduce {
def substitute(term: Term, v: Var, body: Term): Term = body match {
case Var(name) => ???
Check and.
Check or.
Check True.
Check False.
Print True.
Print False.
Variable A: Prop.
Definition compose {A: Type} (f g: A -> A) (x: A) := f (g x).
Lemma comp_eq: forall (A: Type) (f g: A -> A) (x: A), compose f g x = f (g x).
Proof.
intros.
unfold compose.
exact eq_refl.
Qed.