These programs are safe to refactor:
object p1 {
val x = 1 + 123
val y = 1 + 123
}| import Language.Haskell.TH.Lib | |
| import Language.Haskell.TH.Syntax | |
| module Problem where | |
| data PP a where | |
| PP :: forall a. Typeable a => PP a | |
| instance Lift (PP a) where | |
| lift PP = [|PP|] |
| Calling approve | |
| [Debug] [Morley.Client.TezosClient.Impl.getAlias#254] Getting an alias for tz1TfLF61NboKZYbU7hxX3C1jXw45im6d8Kt | |
| [Debug] [Morley.Client.TezosClient.Impl.callTezosClient#447] Running: tezos-client -A carthage.testnet.tezos.serokell.team -P 8732 --mode mockup list known contracts | |
| [Debug] [Morley.Client.TezosClient.Impl.callTezosClient#453] stdout: | |
| nettest.Stablecoin.Stablecoin FA1.2: KT1VuoysRj6tWFXAjrbQd67YMnTMi3SpNTdC | |
| nettest.Stablecoin.natConsumer: KT1GnUjbtLqQgeupcDCReYmzTa86mkvwgoRa | |
| nettest.Stablecoin.nettest.transferlist_internal: KT1QQAymdeefTj3RwTkvjvGWTDWJPenoiG7k | |
| nettest.Stablecoin.nettest.Stablecoin: KT1Q4DccWWaM15nc9iaMDcwLNj3m85k8euVF | |
| helper: KT1DW3Fq5m7q1bn8QgjhSX9iEwcBAK82bva6 | |
| nettest.Stablecoin.chainIdContract: KT1KUhbZCatB5X6svDpXJ4gAX5a9X1LyU2yv |
| Calling approve | |
| [Debug] [Morley.Client.TezosClient.Impl.getAlias#254] Getting an alias for tz1TfLF61NboKZYbU7hxX3C1jXw45im6d8Kt | |
| [Debug] [Morley.Client.TezosClient.Impl.callTezosClient#447] Running: tezos-client -A carthage.testnet.tezos.serokell.team -P 8732 --mode mockup list known contracts | |
| [Debug] [Morley.Client.TezosClient.Impl.callTezosClient#453] stdout: | |
| nettest.Stablecoin.Stablecoin FA1.2: KT1GrQC4nGZckcfeCtLu2sKphsNsoxUoLNtK | |
| nettest.Stablecoin.natConsumer: KT1GdZ9EoAY2o5jHN2x4rACwTDAwcCGZV7bn | |
| helper: KT1DW3Fq5m7q1bn8QgjhSX9iEwcBAK82bva6 | |
| nettest.Stablecoin.chainIdContract: KT1KUhbZCatB5X6svDpXJ4gAX5a9X1LyU2yv | |
| nettest.Stablecoin.permitCounterConsumer: KT1AihogGMjD3R8y5TK31Z6iJKXwCThK4i5D | |
| nettest.Stablecoin.nettest.Stablecoin: KT1HBxv2cjKjY1nWALMbKKMdsymrdTf8hxtG |
| Loading... | |
| Welcome to the Ammonite Repl 1.3.2 | |
| (Scala 2.12.7 Java 1.8.0_212) | |
| If you like Ammonite, please support our development at www.patreon.com/lihaoyi | |
| @ import $ivy.`org.scala-lang.modules::scala-parser-combinators:1.1.2` | |
| import $ivy.$ | |
| @ { | |
| sealed trait Expr | |
| case class Term(term: String) extends Expr |
| import cats.implicits._ | |
| import org.joda.time.DateTime | |
| import tv.spotx.ironbark.druid.{DimensionMetadata, MeasurementMetadata, Schema} | |
| import tv.spotx.ironbark.syntaxtree.druid.DruidQuery | |
| import tv.spotx.ironbark.validation.Err.{Errs, MaybeValid} | |
| object Test extends App { | |
| // case class AuthCheck[+A](authorize: UserEntities => Either[Errs, (A, UserEntities)]) |
| import eu.timepit.refined._ | |
| import eu.timepit.refined.api._ | |
| import eu.timepit.refined.auto._ | |
| import eu.timepit.refined.numeric._ | |
| import eu.timepit.refined.boolean._ | |
| import eu.timepit.refined.char._ | |
| import eu.timepit.refined.collection._ | |
| import eu.timepit.refined.generic._ | |
| import eu.timepit.refined.string._ |
| import org.scalacheck.cats.implicits._ | |
| import org.scalacheck.Gen | |
| import io.circe.{Decoder, Encoder} | |
| object Test extends App { | |
| case class X(i: Int) | |
| implicit val x: Encoder[X] = Wrapper[X].deriveInstance[Encoder] | |
| implicit val y: Decoder[X] = Wrapper[X].deriveInstance[Decoder].withErrorMessage("some custom error msg") | |
| val z: Gen[X] = Wrapper[X].lift(Gen.choose(0, 10)) |
This assumes familiarity with kinds and GADTs. Here's the extensions you're gonna need:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE ExplicitForAll #-}