Size: a a a

Scala User Group

2020 September 14

Oℕ

Oleg ℕizhnik in Scala User Group
Юрий Бадальянц
Но это ведь не отменяет того, что ограниченная реализация в виде либы есть?
Это реализация другого.
Можно сказать, что она ограничена настолько, что её почти никогда не используют
источник

ЮБ

Юрий Бадальянц... in Scala User Group
Ну как это. Операции над синглтонами. Плюс минус там. Разве не об этом была выше речь?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
они на имплиситах
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну представим, например, что ты сделал какой-то SizedList[Length <: Int, +A]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И реализовал операцию
def ++[N <: Int, A1 >: A](xs: SizedList[N, A1]): SizedList [Length + N, A1]
источник

ЮБ

Юрий Бадальянц... in Scala User Group
Ну так в скале 2 иначе не сделать
источник

Oℕ

Oleg ℕizhnik in Scala User Group
На синглтон операция она будет выглядеть как
источник

ЮБ

Юрий Бадальянц... in Scala User Group
Но тем образом пытаются достичь похожих вещей.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
def ++[N <: Int, A1 >: A, M <: Int](xs: SizedList[N, A1])(implicit Sum.Aux[Length, N, M]: SizedList [M, A1]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Первую (в скала 3) ты можешь использовать нормально.
Для статически известных чисел она будет производить статически известные, для неизвестных она будет оставлять тайп-конструктор, о котором ты позже сможешь использовать информацию о коммутативности, ассоциативности, нейтральности 0 и т.п., чтобы получить адекватные результаты.


В scala 2 ты сможешь получить результат для статически известных длин, а для любого реального кода, где длина заранее неизвестна, ты должен будешь заранее знать какие операции с какими элементами ты должен будешь произвести, чтобы иметь все нужные баунды. Что доказуемо невозможно для большинства кода за пределами пробного кода в консоли.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Юрий Бадальянц
Ну так в скале 2 иначе не сделать
Поэтому и речь о том, что нет в scala 2 такого.
Исходное сообщение и рассказывало, что можно делать именно в scala 3, чего нельзя в scala 2. В scala 2 эти операции имеют почти пустую область применения
источник

AO

Andrey Osnovin in Scala User Group
А у этого есть какой-то практический смысл? Желательно примеры где это может пригодиться в реальной жизни
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Верифицированные типы данных
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну например вы можете определить тип матрицы M × N :
SizedList[M, SizedList[N, A]]
Это будет почти то же самое, что и List[List[A]], но вы будете знать что все списки внутри одинаковой длины, что вы проверили это при конструкции / чтении данных.
Для таких данных вы можете определить безопасные операции конкатенации/транспозиции.

А во многих местах в коде на основе типа можете получить гарантию, что некоторые конкретные требования уже были заранее проверены.
источник

AO

Andrey Osnovin in Scala User Group
Как раз сейчас читал пост про матрицы и singletons типы в хаскелле https://serokell.io/blog/dimensions-haskell-singletons
источник

IZ

Ilya Zhavoronkov in Scala User Group
Всем привет. Кто-нибудь может плз по sbt подсказать? В мульти-модульном проекте я пытаюсь добавить артефакт кастомный для публикации в нексус.
lazy val mySubProject = (project in file("my-sub-project"))
 .settings(
   scalacOptions += "-Yresolve-term-conflict:object",
   credentials += Credentials(Path.userHome / ".sbt" / ".credentials"),
   publishTo := myRepo,
   publishArtifact in (Compile, packageSrc) := false,
   publishArtifact in (Compile, packageBin) := false,
   publishArtifact in (Compile, packageDoc) := false,
   addArtifact(Artifact("my_personal_archive", "zip", "zip"), makeArchiveTask)
 )

И получаю вот эту ошибку
Re
ference to undefined setting: mySubProject / makeArchiveTask from mySubProject / packagedArtifacts (Defaults.scala:3745)
Д
елаю по инструкции https://www.scala-sbt.org/1.x/docs/Artifacts.html.
Что для счастья не хватает?
источник

R

Roman in Scala User Group
судя по всему не хватает makeArchiveTask := { ... }
источник

IZ

Ilya Zhavoronkov in Scala User Group
Roman
судя по всему не хватает makeArchiveTask := { ... }
это есть. у неё тип TaskKey[File]
источник

AS

Andrey Sugak in Scala User Group
Ilya Zhavoronkov
это есть. у неё тип TaskKey[File]
Где есть? В сеттингах суб-прожеккта — нет.
источник

IZ

Ilya Zhavoronkov in Scala User Group
Andrey Sugak
Где есть? В сеттингах суб-прожеккта — нет.
вот так выглядит, что в сеттингах добавить тогда?
lazy val makeArchiveTask = taskKey[File]("makeArchiveTask")

makeArchiveTask := { ...  }

lazy val mySubProject = (project in file("my-sub-project"))
  .settings(????)
источник