diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..590d683 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,2 @@ +[*.{kt,kts}] +max_line_length=120 diff --git a/.gitignore b/.gitignore index 21c3e4e..ac44f55 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ out gradle .gradle -.kotlintest build diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/GitLink.xml b/.idea/GitLink.xml new file mode 100644 index 0000000..009597c --- /dev/null +++ b/.idea/GitLink.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..171f3b2 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,348 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..eaa8acf --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..611e7c8 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..b6b75ff --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..de926d5 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4e90a36 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 9ee7d35..f6a837d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,11 @@ -val arrowVersion by extra { "0.10.0" } +val arrowVersion = "1.0.1" +val kotestVersion = "5.3.0" plugins { - kotlin("jvm") version "1.3.30" + kotlin("jvm") version "1.6.21" } repositories { - jcenter() mavenCentral() maven(url = "https://dl.bintray.com/arrow-kt/arrow-kt/") } @@ -13,15 +13,12 @@ repositories { dependencies { implementation(kotlin("stdlib")) - compile("io.arrow-kt:arrow-core:$arrowVersion") - compile("io.arrow-kt:arrow-syntax:$arrowVersion") - compile("io.arrow-kt:arrow-optics:$arrowVersion") + implementation(platform("io.arrow-kt:arrow-stack:$arrowVersion")) + implementation("io.arrow-kt:arrow-core") + implementation("io.kotest:kotest-runner-junit5-jvm:$kotestVersion") - testCompile("io.kotlintest:kotlintest-runner-junit5:3.3.2") - testCompile("junit:junit:4.12") + testImplementation(kotlin("test")) } -tasks { - test { - useJUnitPlatform() - } +tasks.withType().configureEach { + useJUnitPlatform() } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 44e7c4d..aa991fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/kotlin/ft/typesafety/OptionalExercises.kt b/src/main/kotlin/ft/typesafety/OptionalExercises.kt index 3617bad..07a3dfe 100644 --- a/src/main/kotlin/ft/typesafety/OptionalExercises.kt +++ b/src/main/kotlin/ft/typesafety/OptionalExercises.kt @@ -1,6 +1,9 @@ package ft.typesafety +import arrow.core.None import arrow.core.Option +import arrow.core.Option.Companion.fromNullable +import arrow.core.Some /** * Use pattern matching and recursion. No vars, no loops, no overriding. diff --git a/src/test/kotlin/ft/higherorder/FoldingExercisesTest.kt b/src/test/kotlin/ft/higherorder/FoldingExercisesTest.kt index 7d185a8..dc0048f 100644 --- a/src/test/kotlin/ft/higherorder/FoldingExercisesTest.kt +++ b/src/test/kotlin/ft/higherorder/FoldingExercisesTest.kt @@ -14,8 +14,8 @@ import ft.higherorder.FoldingExercises.sum import ft.recursion.Nil import ft.recursion.FunList import ft.recursion.Cons -import io.kotlintest.specs.StringSpec -import io.kotlintest.shouldBe +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe class FoldingExercisesTest : StringSpec({ diff --git a/src/test/kotlin/ft/recursion/RecursionExercisesTest.kt b/src/test/kotlin/ft/recursion/RecursionExercisesTest.kt index f9a7ae2..da47fbc 100644 --- a/src/test/kotlin/ft/recursion/RecursionExercisesTest.kt +++ b/src/test/kotlin/ft/recursion/RecursionExercisesTest.kt @@ -11,8 +11,8 @@ import ft.recursion.RecursionExercises.flatten import ft.recursion.RecursionExercises.flatMap import ft.recursion.RecursionExercises.maximum import ft.recursion.RecursionExercises.reverse -import io.kotlintest.specs.StringSpec -import io.kotlintest.shouldBe +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe class RecursionExercisesTest : StringSpec({ "10 + 34 = 44" { diff --git a/src/test/kotlin/ft/typesafety/OptionalExercises1Test.kt b/src/test/kotlin/ft/typesafety/OptionalExercises1Test.kt index ca99571..7d6c784 100644 --- a/src/test/kotlin/ft/typesafety/OptionalExercises1Test.kt +++ b/src/test/kotlin/ft/typesafety/OptionalExercises1Test.kt @@ -5,8 +5,8 @@ import arrow.core.Some import ft.typesafety.OptionalExercises1.getFromConfig import ft.typesafety.OptionalExercises1.lengthOfHost import ft.typesafety.OptionalExercises1.portPlus1000 -import io.kotlintest.shouldBe -import io.kotlintest.specs.StringSpec +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe class OptionalExercises1Test : StringSpec({ diff --git a/src/test/kotlin/ft/typesafety/OptionalExercises2Test.kt b/src/test/kotlin/ft/typesafety/OptionalExercises2Test.kt index 9d8e8df..b00ac8d 100644 --- a/src/test/kotlin/ft/typesafety/OptionalExercises2Test.kt +++ b/src/test/kotlin/ft/typesafety/OptionalExercises2Test.kt @@ -2,8 +2,8 @@ package ft.typesafety import ft.typesafety.OptionalExercises2.connectToSquareupHostsOnly import ft.typesafety.OptionalExercises2.getEnvForHost -import io.kotlintest.shouldBe -import io.kotlintest.specs.StringSpec +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe class OptionalExercises2Test : StringSpec({ diff --git a/src/test/kotlin/ft/typesafety/OptionalExercises3Test.kt b/src/test/kotlin/ft/typesafety/OptionalExercises3Test.kt index 4acb2d8..37bd8c9 100644 --- a/src/test/kotlin/ft/typesafety/OptionalExercises3Test.kt +++ b/src/test/kotlin/ft/typesafety/OptionalExercises3Test.kt @@ -1,5 +1,6 @@ package ft.typesafety +import arrow.core.curried import ft.typesafety.OptionalExercises3.Just import ft.typesafety.OptionalExercises3.Maybe import ft.typesafety.OptionalExercises3.Nothing @@ -12,9 +13,8 @@ import ft.typesafety.OptionalExercises3.sequence import ft.typesafety.OptionalExercises3.orElse import ft.typesafety.OptionalExercises3.fold import ft.typesafety.OptionalExercises3.map -import io.kotlintest.shouldBe -import io.kotlintest.specs.StringSpec -import arrow.syntax.function.curried +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe class OptionalExercises3Test : StringSpec({