Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Trying to add metadata for urls for next and previous links but can't resolve error

13 views
Skip to first unread message

Abner Gershon

unread,
Jan 1, 2025, 11:07:06 PMJan 1
to hakyll
I am seeking to create a series of "slides", ie webpages, to be used in a presentation. I thought this might be a good way to get to know Hakyll a bit.

Here is the fragment of code that I use to define the slide context, slideCtx
---
slideCtx :: Context String
slideCtx =
    field "prevSlide" $ \item -> do
        metadata <- getMetadata (itemIdentifier item)
        return $ maybe "" id $ lookupString "prevSlide" metadata
    `mappend`
    field "nextSlide" $ \item -> do
        metadata <- getMetadata (itemIdentifier item)
        return $ maybe "" id $ lookupString "nextSlide" metadata
    `mappend`
    defaultContext
---
This results in the following error message:

site.hs:79:5: error: [GHC-83865]
    • Couldn't match expected type: Compiler String
                  with actual type: Context String
    • In the second argument of ‘mappend’, namely ‘defaultContext’
      In the expression:
        do metadata <- getMetadata (itemIdentifier item)
           return $ maybe "" id $ lookupString "nextSlide" metadata
          `mappend` defaultContext
      In the second argument of ‘($)’, namely
        ‘\ item
           -> do metadata <- getMetadata (itemIdentifier item)
                 return $ maybe "" id $ lookupString "nextSlide" metadata
                `mappend` defaultContext’
   |
79 |     defaultContext
   |     ^^^^^^^^^^^^^^
(ERROR)-(Exit Code 1)-(General error)
--- full site.hs attached attached below
I get that there is a type error, specifically that defaultContext has type Context String and should be Compiler  String. Just not sure how to resolve this. I have been struggling with this for quite a while now and really have no clue how to fix this.
Gratefully,
Abner


site.hs

Alexander Batischev

unread,
Jan 2, 2025, 8:05:32 AMJan 2
to hak...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello Abner,

On Wed, Jan 01, 2025 at 06:29:35PM -0800, Abner Gershon wrote:
> In the expression:
> do metadata <- getMetadata (itemIdentifier item)
> return $ maybe "" id $ lookupString "nextSlide" metadata
> `mappend` defaultContext

Apparently the compiler thinks that ``` `mappend` defaultContext ``` is
part of the second argument to `field "nextSlide"`. I think it happens
because `($)` takes the rest of the expression as the argument.

I believe you can fix this with some parentheses:

```
slideCtx :: Context String
slideCtx =
(field "prevSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "prevSlide" metadata)
`mappend`
(field "nextSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "nextSlide" metadata)
`mappend`
defaultContext
```

`mconcat` might be more readable:

```
slideCtx :: Context String
slideCtx =
mconcat
[
field "prevSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "prevSlide" metadata
, field "nextSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "nextSlide" metadata
, defaultContext
]
```

- --
Regards,
Alexander Batischev

PGP key 356961A20C8BFD03
Fingerprint: CE6C 4307 9348 58E3 FD94 A00F 3569 61A2 0C8B FD03

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEzmxDB5NIWOP9lKAPNWlhogyL/QMFAmd2jw0ACgkQNWlhogyL
/QOsShAAu3PHpz1OCg5wRW5oaICF+fpJ6IvXk7G2ItXqt4zAyH0prbIHQV1iDiID
4ZQlBvs9XF7VbDNyt8vv8K5HzFeclQ6BxVPTtwwFEF6kKKmTfnBxpNXzTpBsCaAb
kA3xgBKybG7GQwzao/xr7i+eLHl5tLXlQM7GlqVMbVC8OLliSs5o6wxoBr9yB2iJ
HJRIT2sTL2dTQWTLomHd3hWv5LNfKTGSANyIPdctelnODYWvVrphQg3XM6fquJjw
eHo4aaNClQwKUkSBLrgKHiaAPeN2CLQaGlEpcktH2sI8I+WHzRp/PAUd4X7yPUYt
gaKmSYdPxsJ4Yubd0AxkaYhDf5sWr5iFlTiiNHVYF0yQGuIOBKfn3fLeZ8cUFZYa
M/ZK+rAZQ5YLyzTyWb4FnPf+9/jGmzzAbcETRukOSeXT+7l1Mg2OSvjCP/JmntSu
NANMfAk43elG/hRJoGIWczqpYndQaRRlHYLxheSyaorX5nXXQvnJLYOKChu8dCLq
WZRszZYI/VUogkGax+M/VEZ1vUHBUUd4+Lj7H0/H8Y3UhHoOJRxKmKqqs/vxwsSC
Mg/sV+18osL+8G0DfBZUkxxqlUiSdtldBWBneDhXb2SfG31YhYFfwA46LK1E9h+V
WLai5JaSuX21IokEdw+zBPXSUbDXqWL2huKiHn3MfsYIz7zRuaY=
=oPDq
-----END PGP SIGNATURE-----

Abner Gershon

unread,
Jan 2, 2025, 3:21:05 PMJan 2
to hakyll
Thanks so much. This solution works like a charm.
Reply all
Reply to author
Forward
0 new messages