По словам знатока Руководство по установке сторонних БАНОК , команда:
mvn install:install-file -Dfile= -DgroupId= \
-DartifactId= -Dversion= -Dpackaging=
Вам нужна действительно упаковочная опция. Это отвечает на исходный вопрос.
Теперь, в Вашем контексте, Вы боретесь с банкой, обеспеченной Sun. Необходимо читать Преодоление страницы Sun JARs также. Там, Вы изучите, как помочь знатоку предоставить Вам лучшую информацию о местоположении банок Sun и как добавить Java.net Знаток 2 репозитория , который содержит jta-1.0.1B.jar
. Добавьте это в Вашем settings.xml
(не портативный) или забастовка> pom.xml
(портативный):
maven2-repository.dev.java.net
Java.net Repository for Maven
http://download.java.net/maven/2/
default
liftA
, liftM
, fmap
и .
должны быть одной и той же функцией, и они должны быть, если они удовлетворяют закону функторов:
fmap id = id
Однако это не проверяется Haskell.
Теперь об аппликативе. ap
и <*>
могут различаться для некоторых функторов просто потому, что может быть более одной реализации, удовлетворяющей типам и законам. Например, List имеет более одного возможного экземпляра Applicative
. Вы можете объявить аппликатив следующим образом:
instance Applicative [] where
(f:fs) <*> (x:xs) = f x : fs <*> xs
_ <*> _ = []
pure = repeat
Функция ap
по-прежнему будет определяться как liftM2 id
, который является экземпляром Applicative
, который поставляется бесплатно с каждые Монада
. Но здесь у вас есть пример конструктора типа, имеющего более одного экземпляра Applicative
, оба из которых удовлетворяют законам. Но если ваши монады и аппликативные функторы расходятся во мнениях, считается хорошим тоном иметь для них разные типы. Например, приведенный выше экземпляр Applicative
не согласуется с монадой для []
, поэтому вам действительно следует сказать newtype ZipList a = ZipList [a]
, а затем создать новый экземпляр для ZipList
вместо []
.
Они могут отличаться, но они не должны .
Они могут отличаться, потому что могут иметь разные реализации: одна определена в экземпляр Applicative
, а другой определен в экземпляре Monad
. Но если они действительно различаются, то я бы сказал, что программист, написавший эти экземпляры, написал вводящий в заблуждение код.
Вы правы: функции существуют так, как они существуют, по историческим причинам. У людей есть твердые представления о том, как все должно было быть.