haskell-jp / general #1

haskell-org-statushttps://status.haskell.org/ の RSS を流すようにしてみました
@takano32 has joined the channel
@ has joined the channel
@ has joined the channel
@mwrote has joined the channel
@com01evi has joined the channel
@karky7 has joined the channel
@ has joined the channel
@ has joined the channel
@ has joined the channel
@Hiroto has joined the channel
@legokichi has joined the channel
@yoshi has joined the channel
@ has joined the channel
!everyone Haskellそのものからちょっと外れた、関連する数学の話題を話すためのチャンネル math を作りました。
圏論などの数学諸分野はHaskellの重要な基礎となってはいますが(そもそもコンピュータが数学の賜ですしね)
Haskell自体は数学が分からなくても十分に使用できるものです。
しかしながらHaskellをやっていて圏論を始め数学に関心を持った人はたくさんいるので、そうした人が自由に数学の話をできる場はあった方がいいだろうと思ったため作りました。
@ has joined the channel
またメンバーが増えた & 上に流れてしまったまま忘れてた ので再掲します。
https://haskell-jp.slack.com/archives/C4LFB6DE0/p1500870616095473
@ has joined the channel
@H.Umehara has joined the channel
data (Show a) => Color a = Red | Green | Blue | Rgb {r :: a, g :: a, b :: a} deriving (Show)

ないし
data (Show a) => Color a where
  Red :: Color
  Green :: Color
  Blue :: Color
  Rgb :: {r ::a, g :: a, b :: a} -> Color
  deriving (Show)

という制約はどう書いたら良いでしょうか?
data Color a where
  Red :: Color
  Green :: Color
  Blue :: Color
  Rgb :: (Show a) => {r ::a, g :: a, b :: a} -> Color
  deriving (Show)

でどうでしょうか?
{-# LANGUAGE GADTs #-}
data Color a where
  Red :: Color
  Green :: Color
  Blue :: Color
  Rgb :: (Show a) => {r ::a, g :: a, b :: a} -> Color
  deriving (Show)
main = print (Red :: (Color Integer))

とすると
prog.hs:3:10: error:
    • Expecting one more argument to ‘Color’
      Expected a type, but ‘Color’ has kind ‘k0 -> *’
    • In the type ‘Color’
      In the definition of data constructor ‘Red’
      In the data declaration for ‘Color’
  |
3 |   Red :: Color
  |          ^^^^^

となります。注釈はどうつければよいでしょうか?
おお、すみません、よく見てませんでした。

data Color a where
  Red :: Color a
  Green :: Color a
  Blue :: Color a
  Rgb :: (Show a) => {r ::a, g :: a, b :: a} -> Color a
  deriving (Show)
main = print (Red :: (Color Integer))

ではないかと。

prog.hs:7:13: error:
    • Can't make a derived instance of ‘Show (Color a)’:
        Constructor ‘Rgb’ has constraints in its type
        Possible fix: use a standalone deriving declaration instead
    • In the data declaration for ‘Color’
  |
7 |   deriving (Show)
  |    


となるので

{-# LANGUAGE GADTs #-}
data (Show a) => Color a where
  Red :: Color a
  Green :: Color a
  Blue :: Color a
  Rgb :: {r ::a, g :: a, b :: a} -> Color a
  deriving (Show)
main = print (Red :: (Color Integer))


相当の書き方が必要になると思います
{-# LANGUAGE GADTs #-}
data Color a where
  Red :: (Show a) => Color a
  Green :: (Show a) => Color a
  Blue :: (Show a) => Color a
  Rgb :: (Show a) => {r ::a, g :: a, b :: a} -> Color a
  deriving (Show)
main = print (Red :: (Color Integer))


prog.hs:7:13: error:
    • Can't make a derived instance of ‘Show (Color a)’:
        Constructor ‘Red’ has constraints in its type
        Constructor ‘Green’ has constraints in its type
        Constructor ‘Blue’ has constraints in its type
        Constructor ‘Rgb’ has constraints in its type
        Possible fix: use a standalone deriving declaration instead
    • In the data declaration for ‘Color’
  |
7 |   deriving (Show)
  |             ^^^^

のようになり、導出できないようです
自分で Show インスタンスを定義するか、どうしてもやりたければ https://haskell-jp.slack.com/archives/C5666B6BB/p1507884910000527 でも触れているとおり DatatypeContexts を使えばよいのではないかと。
ちなみに、それなんで必要なんですか?
ふと
data Color a = Red | Green | Blue | Rgb {r :: a, g :: a, b :: a} deriving (Show)

をGADTで書いてみようとしたら思いのほかややこしかったという事象です
上の警告文の通り StandaloneDeriving をつけたらいけました
{-# LANGUAGE GADTs, StandaloneDeriving #-}

data Color a where
  Red :: (Show a) => Color a
  Green :: (Show a) => Color a
  Blue :: (Show a) => Color a
  Rgb :: (Show a) => {r ::a, g :: a, b :: a} -> Color a

deriving instance Show (Color a)

main = print (Red :: (Color Integer))
@krdlab has joined the channel
@karako has joined the channel
@ has joined the channel
@ has joined the channel
@oganao has joined the channel
@ has joined the channel
@Tomohiro has joined the channel
random で以前から話していた件が実現しました。 github-trends でGitHubのトレンドをslackで購読することが出来るようになりました。
@jabara has joined the channel
仕事でも趣味でもHaskell書いてます。
Etaという言語を知り、そこから<@U4M4XHKB8> さんのSlideShareに行き着き、Haskell-jpを知りました。
よろしくお願いします。
Etaの質問を questions に投げるのはありですか?
実質Haskellなんでありだと思います!
ただ、Etaの場合Eta自身のバグにハマる可能性が高いので、 https://gitter.im/typelead/eta で聞かないと分からないものもあるかも知れません。。。
@niiyz has joined the channel
名古屋で行われたイベントで、Liquid Haskell の LT をやってきました。もしよかったらご笑覧ください。
@ueda has joined the channel
@reotaso has joined the channel
Hello everyone, nice to talk to you. どうぞよろしくお願いします。
[不定期] またメンバーが増えた & 上に流れてしまったまま忘れてた ので再掲します。
https://haskell-jp.slack.com/archives/C4LFB6DE0/p1500870616095473
Hello, I started learning Haskell this month. Nice to meet you!
@tetsuyama has joined the channel