Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ install:
- rvm use 2.2.3 --install --fuzzy
- gem update --system
- gem install sass
- gem install ruby_dep -v 1.3.1
- gem install jekyll -v 3.2.1
before_script:
- if [ $TRAVIS_PULL_REQUEST = 'false' ]; then git checkout -qf $TRAVIS_BRANCH; fi
Expand Down
69 changes: 4 additions & 65 deletions src/main/scala/libra/nonsi/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,6 @@ package object nonsi {
implicit def gradian: Show[Gradian] = Show[Gradian]("gon")
implicit def turn: Show[Turn] = Show[Turn]("tr")

implicit def degreeArcminuteConversion[A](
implicit c: ConvertableTo[A]
): ConversionFactor[A, Angle, Degree, Arcminute] =
new ConversionFactor(c.fromInt(60))

implicit def degreeArcsecondConversion[A](
implicit c: ConvertableTo[A]
): ConversionFactor[A, Angle, Degree, Arcsecond] =
new ConversionFactor(c.fromInt(3600))

implicit def arcminuteArcsecondConversion[A](
implicit c: ConvertableTo[A]
): ConversionFactor[A, Angle, Arcminute, Arcsecond] =
Expand All @@ -52,72 +42,21 @@ package object nonsi {
): ConversionFactor[A, Angle, Radian, Degree] =
new ConversionFactor(c.fromDouble(180.0 / pi))

implicit def radianArcminuteConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Radian, Arcminute] =
degreeArcminuteConversion.compose(radianDegreeConversion)

implicit def radianArcsecondConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Radian, Arcsecond] =
degreeArcsecondConversion.compose(radianDegreeConversion)
implicit def degreeArcminuteConversion[A](
implicit c: ConvertableTo[A]
): ConversionFactor[A, Angle, Degree, Arcminute] =
new ConversionFactor(c.fromInt(60))

implicit def gradianRadianConversion[A](
implicit c: ConvertableTo[A]
): ConversionFactor[A, Angle, Gradian, Radian] =
new ConversionFactor(c.fromDouble(pi / 200.0))

implicit def gradianDegreeConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Gradian, Degree] =
radianDegreeConversion.compose(gradianRadianConversion)

implicit def gradianArcminuteConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Gradian, Arcminute] =
radianArcminuteConversion.compose(gradianRadianConversion)

implicit def gradianArcsecondConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Gradian, Arcsecond] =
radianArcsecondConversion.compose(gradianRadianConversion)

implicit def turnGradianConversion[A](
implicit c: ConvertableTo[A]
): ConversionFactor[A, Angle, Turn, Gradian] =
new ConversionFactor(c.fromInt(400))

implicit def turnRadianConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Turn, Radian] =
gradianRadianConversion.compose(turnGradianConversion)

implicit def turnDegreeConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Turn, Degree] =
gradianDegreeConversion.compose(turnGradianConversion)

implicit def turnArcminuteConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Turn, Arcminute] =
gradianArcminuteConversion.compose(turnGradianConversion)

implicit def turnArcsecondConversion[A](
implicit c: ConvertableTo[A],
multiplicative: MultiplicativeSemigroup[A]
): ConversionFactor[A, Angle, Turn, Arcsecond] =
gradianArcsecondConversion.compose(turnGradianConversion)



type AngularVelocityQuantity[A, L <: UnitOfMeasure[Angle], T <: UnitOfMeasure[Time]] =
Quantity[A, Term[Angle, L, Fraction[1, 1]] :: Term[Time, T, Fraction[-1, 1]] :: HNil]

Expand Down
14 changes: 12 additions & 2 deletions src/main/scala/libra/ops/base.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package libra
package ops

import libra.UnitOfMeasure
import libra.nonsi.Angle
import shapeless.Lazy
import spire.algebra._
import spire.implicits._
import spire.math.ConvertableFrom

object base {

Expand Down Expand Up @@ -32,6 +32,16 @@ object base {
new ConversionFactor(otherConversionFactor.value * value)
}

object ConversionFactor {
implicit def inductiveAngelConversionFactor[A, From <: UnitOfMeasure[Angle], To <: UnitOfMeasure[Angle], Next <: UnitOfMeasure[Angle]](
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this part be generic on any dimension D instead of Angle?

Copy link
Contributor Author

@ldrygala ldrygala Dec 13, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i tried but i didn't work (diverging implicit expansion for type libra.ops.base.ConversionFactor), therefor i used Angle. I will try one more time to make it more generic

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's ok, there's no need if you already tried! I'll take a better look at it later this week. I've debugged a fair few implicit resolution errors by now, so may have more luck.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, so i'm waiting for your solution and i hope that i'll be able to understand them :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in 'Angel' here

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

implicit multiplicativeSemigroup: MultiplicativeSemigroup[A],
fromConversion: ConversionFactor[A, Angle, From, Next],
toConversion: Lazy[ConversionFactor[A, Angle, Next, To]]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

):ConversionFactor[A, Angle, From, To] =
new ConversionFactor(fromConversion.value * toConversion.value.value)

}

/** Derived typeclass for the conversion factor from F to T
*
* Two conversions (from and to) are derived from a single conversion factor
Expand Down