haskell-jp / general #1

haskell-org-statushttps://status.haskell.org/ の RSS を流すようにしてみました
@takano32 has joined the channel
@falsandtru has joined the channel
@kr784nsyta has joined the channel
@yohei920 has joined the channel
@vis.nt.rstd has joined the channel
@cantimerny.g has joined the channel
@ryym.64 has joined the channel
@ryo.furutani has joined the channel
being.paperlefthand
@being.paperlefthand has joined the channel
@hiroto.shioi has joined the channel
@legokichi has joined the channel
@takatheshi has joined the channel
@junkjunctions has joined the channel
!everyone Haskellそのものからちょっと外れた、関連する数学の話題を話すためのチャンネル math を作りました。
圏論などの数学諸分野はHaskellの重要な基礎となってはいますが(そもそもコンピュータが数学の賜ですしね)
Haskell自体は数学が分からなくても十分に使用できるものです。
しかしながらHaskellをやっていて圏論を始め数学に関心を持った人はたくさんいるので、そうした人が自由に数学の話をできる場はあった方がいいだろうと思ったため作りました。
@ayu.mushi2015 has joined the channel
またメンバーが増えた & 上に流れてしまったまま忘れてた ので再掲します。
https://haskell-jp.slack.com/archives/C4LFB6DE0/p1500870616095473
@egisatoshi has joined the channel
@heikichi3 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
not.hot.red.pepper
@not.hot.red.pepper has joined the channel
@memos has joined the channel
@kk4649 has joined the channel
becausethespiderspied
@becausethespiderspied has joined the channel
@taketarou2 has joined the channel
tomo426.sakura1281m
@tomo426.sakura1281m has joined the channel
random で以前から話していた件が実現しました。 github-trends でGitHubのトレンドをslackで購読することが出来るようになりました。
@ah has joined the channel
仕事でも趣味でもHaskell書いてます。
Etaという言語を知り、そこから<@U4M4XHKB8> さんのSlideShareに行き着き、Haskell-jpを知りました。
よろしくお願いします。
Etaの質問を questions に投げるのはありですか?
実質Haskellなんでありだと思います!
ただ、Etaの場合Eta自身のバグにハマる可能性が高いので、 https://gitter.im/typelead/eta で聞かないと分からないものもあるかも知れません。。。
@yoshida has joined the channel
名古屋で行われたイベントで、Liquid Haskell の LT をやってきました。もしよかったらご笑覧ください。
@jp.takumi.ueda has joined the channel
@dante071dante 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!
@daniel.friedman has joined the channel