liftM может отличаться от liftA?

По словам знатока Руководство по установке сторонних БАНОК , команда:

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
    
  

30
задан wnoise 6 January 2011 в 20:58
поделиться

2 ответа

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 вместо [].

24
ответ дан 28 November 2019 в 00:19
поделиться

Они могут отличаться, но они не должны .

Они могут отличаться, потому что могут иметь разные реализации: одна определена в экземпляр Applicative , а другой определен в экземпляре Monad . Но если они действительно различаются, то я бы сказал, что программист, написавший эти экземпляры, написал вводящий в заблуждение код.

Вы правы: функции существуют так, как они существуют, по историческим причинам. У людей есть твердые представления о том, как все должно было быть.

8
ответ дан 28 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: